线上OJ 地址:
一本通:1922:【03NOIP普及组】乒乓球 (opens in a new tab)
AcWing:413. 乒乓球 (opens in a new tab)
洛谷:P1042 [NOIP2003 普及组] 乒乓球 (opens in a new tab)
核心思想:
字符串的读入和处理
💡
char ch // ch为字符变量
cin >> ch 遇到空格或者回车就会停止读入,换句话说,不会读入空格和回车。
cin.get(ch) 能读入各种字符,包括空格,回车等。需要自己判断读入的字符种是否包含空格和回车。
💡
string str
cin >> str 遇到空格或者回车就会停止读入,所以读入的行有可能不完整。
getline(cin, str) 如果想要完整读入包含空格的字符串,可以使用 getline(cin, str)
读入字符串
#include <bits/stdc++.h>
using namespace std;
void solve(string s, int n)
{
int a = 0, b = 0; // 必须初始化为0,因为有数据上来就是E
int len = s.length();
for(int i = 0; i < len; i++)
{
if(s[i] == 'E') break;
else if(s[i] == 'W') a++;
else if(s[i] == 'L') b++;
if( (a >= n || b >= n) && (abs(a - b) >= 2) ) // 隐藏条件,分差需在2分以上才能算赢
{
printf("%d:%d\n", a, b); // 符合条件,则打印
a = 0; // a 和 b 都清0
b = 0;
}
}
printf("%d:%d\n", a, b); // 跳出循环时把剩余比分输出
}
int main()
{
string s, str;
while(cin >> s) str += s; // 字符串叠加
solve(str, 11);
printf("\n");
solve(str, 21);
return 0;
}