描述
华华通过以下方式进行分析, 首先将比赛每个球的胜负列成一张表, 然后分别计算在 11 分制和 21 分制下, 双方的比赛结果(截至记录末尾)
比赛规则和实际比赛规则相同, 在 11 分制下比分为 10:11 时还要继续比赛, 直到分数差距达到 2 分; 同理 21 分制下比分为 20:21 的时候也还要继续比赛
比如现在有这么一份记录,(其中 W 表示华华获得一分, L 表示华华对手获得一分):
WWWWWWWWWWWWWWWWWWWWWWLW
在 11 分制下, 此时比赛的结果是华华第一局 11 比 0 获胜, 第二局 11 比 0 获胜, 正在进行第三局, 当前比分 1 比 1 而在 21 分制下, 此时比赛结果是华华第一局 21 比 0 获胜, 正在进行第二局, 比分 2 比 1 如果一局比赛刚开始, 则此时比分为 0 比 0
你的程序就是要对于一系列比赛信息的输入(WL 形式), 输出正确的结果
输入格式
每个输入文件包含若干行字符串(每行至多 20 个字母), 字符串有大写的 WL 和 E 组成, 也许中间有若干个空格其中 E 表示比赛信息结束, 程序应该忽略 E 之后的所有内容, E 后面可能有干扰文字
输出格式
输出由两部分组成, 每部分有若干行, 每一行对应一局比赛的比分 (按比赛信息输入顺序) 其中第一部分是 11 分制下的结果, 第二部分是 21 分制下的结果, 两部分之间由一个空行分隔
样例 1
样例输入 1
- WWWWWWWWWWWWWWWWWWWW
- WWLWE
样例输出 1
- 11:0
- 11:0
- 1:1
- 21:0
- 2:1
限制
各个测试点 1s
提示
十分简单, 小心输入输出格式!^_^
思路
模拟, 注意 0:0 也要输出
代码
- #include < stdio.h > #include < stdlib.h > #include < string.h >
- int main() {
- int a11,
- b11,
- a21,
- b21;
- char s11[1000000],
- s21[1000000],
- tmp[10000];
- char c;
- memset(s11, 0, sizeof(s11));
- memset(s21, 0, sizeof(s21));
- memset(tmp, 0, sizeof(tmp));
- a11 = 0;
- b11 = 0;
- a21 = 0;
- b21 = 0;
- while ((c = getchar())) {
- if (c == E) {
- sprintf(tmp, "%d:%d\n", a11, b11);
- strcat(s11, tmp);
- sprintf(tmp, "%d:%d\n", a21, b21);
- strcat(s21, tmp);
- break;
- }
- if (c == W) {
- a11++;
- a21++;
- if (a11 >= 11 && a11 - b11 > 1) {
- sprintf(tmp, "%d:%d\n", a11, b11);
- strcat(s11, tmp);
- a11 = 0;
- b11 = 0;
- }
- if (a21 >= 21 && a21 - b21 > 1) {
- sprintf(tmp, "%d:%d\n", a21, b21);
- strcat(s21, tmp);
- a21 = 0;
- b21 = 0;
- }
- }
- if (c == L) {
- b11++;
- b21++;
- if (b11 >= 11 && b11 - a11 > 1) {
- sprintf(tmp, "%d:%d\n", a11, b11);
- strcat(s11, tmp);
- a11 = 0;
- b11 = 0;
- }
- if (b21 >= 21 && b21 - a21 > 1) {
- sprintf(tmp, "%d:%d\n", a21, b21);
- strcat(s21, tmp);
- a21 = 0;
- b21 = 0;
- }
- }
- }
- printf("%s\n", s11);
- printf("%s", s21);
- system("pause");
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2508052.html