那就这样吧e 2022-11-03 02:37 采纳率: 98.1%
浏览 42
已结题

NOIP2003乒乓球问题

img

img


这是题目和题目所给的测试样本,看不懂题目的输入输出之间的关系,也不知道这个字母E表示跳过循环,还是跳出程序

  • 写回答

2条回答 默认 最新

  • 关注

    输入字符串后,循环遍历,统计每行L和W的个数,11分制就是11个字符一组,21分制就是21个字符一组

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    代码如下:

    
    #define _CRT_SECURE_NO_WARNINGS 1
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main()
    {
        char s[2502][26];
        int i, j, nmbW,nmbL;
        int n = 0;
        int flag = 0;
        while (scanf("%s", s[n]) != EOF)
            n++;
    
        //11分制
        nmbW = 0; nmbL = 0;
        for (i = 0; i < n; i++)
        {
            for (j = 0; s[i][j] != '\0'; j++)
            {
                if (s[i][j] == 'W')
                {
                    flag = 0;
                    nmbW++;
                }
                else if (s[i][j] == 'L')
                {
                    flag = 0;
                    nmbL++;
                }
                else if (s[i][j] == 'E')
                    break;
                //11分制度
                if (nmbW + nmbL == 11)
                {
                    printf("%d:%d\n", nmbW, nmbL);
                    nmbW = 0; nmbL = 0;
                    flag = 1;
                }
    
            }
        }
        if(flag == 0) //避免刚好结束比赛的时候重复输出
            printf("%d:%d\n", nmbW, nmbL);
        printf("\n"); //空行
        nmbW = 0; nmbL = 0;
        flag = 0;
        for (i = 0; i < n; i++)
        {
            for (j = 0; s[i][j] != '\0'; j++)
            {
                if (s[i][j] == 'W')
                {
                    flag = 0;
                    nmbW++;
                }
                else if (s[i][j] == 'L')
                {
                    flag = 0;
                    nmbL++;
                }
                else if (s[i][j] == 'E')
                    break;
                //11分制度
                if (nmbW + nmbL == 21)
                {
                    printf("%d:%d\n", nmbW, nmbL);
                    nmbW = 0; nmbL = 0;
                    flag = 1;
                }
            }
        }
        if (flag == 0) //避免刚好结束比赛的时候重复输出
            printf("%d:%d\n", nmbW, nmbL);
        
        return 0;
    }
    
    
    

    回复

    运行结果

    img

    回复

    代码更新如下:

    
    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    typedef struct _score
    {
        int sw;
        int sl;
    }Score;
    int main()
    {
        char ch;
        Score sa[7000], sb[7000]; //11分和21分比赛记录
        int na = 0, nb = 0; //组数
        int cw1 = 0, cl1 = 0; //11分制
        int cw2 = 0, cl2 = 0; //21分制
        int i;
    
        while (scanf("%c",&ch)!=EOF)
        {
            if (ch == 'E')
                break;
            else if (ch == 'W')
            {
                cw1++; cw2++;
            }
            else if (ch == 'L')
            {
                cl1++; cl2++;
            }
    
            if ( (cw1 >= 11 && cw1-cl1>=2) || (cl1>=11 && cl1-cw1>=2) )
            {
                sa[na].sw = cw1;
                sa[na].sl = cl1;
                na++;
                cw1 = 0; cl1 = 0;
            }
            if ( (cw2 >= 21 && cw2-cl2>=2) || (cl2>=21 && cl2-cw2 >=2) )
            {
                sb[nb].sw = cw2;
                sb[nb].sl = cl2;
    
                nb++;
                cw2 = 0; cl2 = 0;
            }
        }
    
        //没有输入,输出0:0
        if (na == 0 && nb==0 && cw1==0 && cl1==0)
        {
            printf("0:0\n\n0:0\n");
            return 0;
        }
    
        //输出11分制结果
        for (i = 0; i < na; i++)
            printf("%d:%d\n", sa[i].sw, sa[i].sl);
        if (cw1 != 0 || cl1 != 0)
            printf("%d:%d\n", cw1, cl1);
    
        printf("\n");
        //输出21分制结果
        for (i = 0; i < nb; i++)
            printf("%d:%d\n", sb[i].sw, sb[i].sl);
        if (cw2 != 0 || cl2 != 0)
            printf("%d:%d\n", cw2, cl2);
    
        return 0;
    }
    

    回复
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 11月10日
  • 已采纳回答 11月3日
  • 创建了问题 11月3日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部