IT节程序设计竞赛网络赛(三)

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));
}
}
}

IT节程序设计竞赛网络赛(三)
http://blask.cn/2020/05/12/it节程序设计竞赛网络赛(三)/
作者
Wayne Li
发布于
2020年5月12日
许可协议