p1042 乒乓球
题目描述
华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在11分制和21分制下,双方的比赛结果(截至记录末尾)。
比如现在有这么一份记录,(其中W
表示华华获得一分,L
表示华华对手获得一分):
WWWWWWWWWWWWWWWWWWWWWWLW
在11分制下,此时比赛的结果是华华第一局11比0获胜,第二局11比0获胜,正在进行第三局,当前比分11比11。而在21分制下,此时比赛结果是华华第一局21比0获胜,正在进行第二局,比分22比11。如果一局比赛刚开始,则此时比分为0比0。直到分差大于或者等于2,才一局结束。
你的程序就是要对于一系列比赛信息的输入(WLW**L形式),输出正确的结果。
输入格式
每个输入文件包含若干行字符串,字符串有大写的WW、LL和EE组成。其中EE表示比赛信息结束,程序应该忽略E之后的所有内容。
输出格式
输出由两部分组成,每部分有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。其中第一部分是1111分制下的结果,第二部分是2121分制下的结果,两部分之间由一个空行分隔。
题解
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
static Scanner in = new Scanner(new BufferedInputStream(System.in));//输入
static PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));//输出
static int wc11, lc11, wc21, lc21;// 分别代表11和21赛制下w,l出现的次数
static LinkedList<String> result11 = new LinkedList<>(), result21 = new LinkedList<>();// 代表11和21赛制下每局比赛的结果
public static void main(String[] args) {
boolean is = true;
while (is)
is = function(in.nextLine().toCharArray(), is);// in.nextLine().toCharArray()返回一个按行读取后的char数组
result11.add(wc11 + ":" + lc11);// 记录最后一局的结果
result21.add(wc21 + ":" + lc21);
print();
}
static void print() {// 下面是输出list中存的每局比赛的数据
Iterator<String> iterator11 = result11.iterator(), iterator21 = result21.iterator();
while (iterator11.hasNext())
out.println(iterator11.next());
out.println();
while (iterator21.hasNext())
out.println(iterator21.next());
out.close();
}
static boolean function(char[] temp, boolean is) {//主要功能
for (int i = 0; i < temp.length; i++) {
if (temp[i] == 'E')// 如果读到'E'返回false
return false;
if (temp[i] == 'W') {// 读到'W'
wc11++;
wc21++;
} else {// 读到'L'
lc11++;
lc21++;
}
check11();// 检查11赛制下该局比赛是否结束
check21();// 检查21赛制下该局比赛是否结束
}
return true;
}
static void check11() {
// 如果比赛结束,存储结果,把计数归零
if (wc11 >= 11 || lc11 >= 11) {
if (wc11 - lc11 >= 2) {
result11.add(wc11 + ":" + lc11);
wc11 = 0;
lc11 = 0;
}
if (lc11 - wc11 >= 2) {
result11.add(wc11 + ":" + lc11);
wc11 = 0;
lc11 = 0;
}
}
}
static void check21() {
if (wc21 >= 21 || lc21 >= 21) {
if (wc21 - lc21 >= 2) {
result21.add(wc21 + ":" + lc21);
wc21 = 0;
lc21 = 0;
}
if (lc21 - wc21 >= 2) {
result21.add(wc21 + ":" + lc21);
wc21 = 0;
lc21 = 0;
}
}
}
}