2月中旬举办了场代码比赛,拉几道我会写的题目来放放(出题人老二次元了)
题目I:防AK是简单知识点,这样的题目你喜欢吗?
题目详情:
苏铭同学是19级的一名新生,他进入北师珠学习已经一年了。他对木铎楼和励耘楼这两栋教学楼印象非常深刻,因为这是距离他的宿舍最近和最远的两栋楼。
因为苏铭同学非常懒,所以他经常乘坐电瓶车来回两栋教学楼之间。聪明的他想到了一个办法可以节约车费,他和司机大哥商量了一件事情:按照来回收费。假设从木铎楼坐到励耘楼为来,从励耘楼坐到木铎楼为回。计算去和回的次数,每次去和每次回共计一个来回,如果有多余的去和回也算作一个单独的来回。
苏铭同学非常热爱学习,每天晚上学累了都直接在教学楼睡觉。而且他每天最多坐一次电瓶车,也只在同一栋教学楼学习。如果两天都在同一栋教学楼学习就不用坐车了。第一天所在的教学楼为起点,不需要考虑从宿舍到教学楼的车费。
你作为苏铭同学的好朋友,请你帮他计算一下,他需要支付多少个来回的车费。
- 输入要求
- 先输入一个T,表示T组数据。
- 每组数据第一行输入一个n(1≤n≤10000),表示有n天。
- 每组数据第二行输入一个只包含大写“M”和“L”的字符串。
- 输出苏铭同学需要支付的来回数。
题目分析:
直接计算ML的个数,ML及一个来回,一个M或者一个L即半个来回,得出结果四舍五入即可0.0
题目代码:
JAVA编写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| import java.util.ArrayList; import java.util.Scanner;
public class Test {
private static String key1 = "ML"; private static String key2 = "LM"; public static int test(String strings) { int num1 = 0; int num2 = 0; int num = 0; String temp = strings; while(strings.contains(key1)) { strings = strings.substring(strings.indexOf(key1) + key1.length()); num1++; } while(temp.contains(key2)) { temp = temp.substring(temp.indexOf(key2) + key2.length()); num2++; } num = num1+num2; return num; }
public static void main(String[] args) { int num,length; String strings; Scanner input = new Scanner(System.in); num = input.nextInt(); for(int i=0;i<num;i++) { length = input.nextInt(); strings = input.next(); System.out.println("Case #"+(i+1)+":"); double ans = test(strings); ans = ans / 2; System.out.println((int)Math.round(ans)); } } }
|