题目名字
题意
每个球的胜负用"W"表示华华获得一分,"L"表示对手获得一分。程序需要根据这些信息,分别计算在11分制和21分制下,双方的比赛结果。
思路
- 首先,它定义了一个字符数组str和一个整数变量cnt,用于存储输入的比赛结果和记录比赛结果的数量。
- 然后,定义了一个名为show的函数,该函数接受一个整数n作为参数。在函数内部,使用变量a和b来记录"W"和"L"的数量,并使用for循环遍历存储的比赛结果。如果a或b的数量达到n,并且它们的绝对差值大于等于2,就输出当前的比分并将a和b重置为0。最后输出最终的比分。
- 在主函数main中,使用while循环不断读取输入的字符,直到输入的字符为’E’为止。如果输入的字符是’W’或者’L’,就将其存储到数组str中。然后调用show函数两次,分别传入参数11和21,以展示不同阶段的比分。
坑点
- 未处理平局情况:在show函数中,只处理了当某一方得分达到n并且绝对差值大于等于2时输出比分,但是没有处理平局的情况,即a和b的差值小于2的情况。
算法一:模拟和计数
- 在主函数中,通过循环读取输入的比赛结果,并将其存储到数组中。这部分属于模拟,模拟了比赛过程中的输入和存储。
- 在show函数中,使用了计数的方法来统计"W"和"L"的数量,并且在特定条件下输出比分。这部分属于计数,通过统计得分的数量和条件判断来输出比分。
实现步骤
- 首先,它定义了一个字符数组str和一个整数变量cnt,用于存储输入的比赛结果和记录比赛结果的数量。
- 然后,定义了一个名为show的函数,该函数接受一个整数n作为参数。在函数内部,使用变量a和b来记录"W"和"L"的数量,并使用for循环遍历存储的比赛结果。如果a或b的数量达到n,并且它们的绝对差值大于等于2,就输出当前的比分并将a和b重置为0。最后输出最终的比分。
- 在主函数main中,使用while循环不断读取输入的字符,直到输入的字符为’E’为止。如果输入的字符是’W’或者’L’,就将其存储到数组str中。然后调用show函数两次,分别传入参数11和21,以展示不同阶段的比分。
代码
#include<iostream>
#include<cmath>
using namespace std;
char str[100010];
int cnt=0;
void show(int n){
int a=0,b=0;
for(int i=0;i<cnt;i++){
if(str[i]=='W') a++;
if(str[i]=='L') b++;
if((a>=n||b>=n)&&abs(a-b)>=2){
cout<<a<<":"<<b<<endl;
a=b=0;
}
}
cout<<a<<":"<<b<<endl;
}
int main(){
char ch;
while(cin>>ch&&ch!='E'){
if(ch=='W'||ch=='L'){
str[cnt++]=ch;
}
}
show(11);
cout<<endl;
show(21);
}