守愿星空 2022-12-17 11:11 采纳率: 100%
浏览 178
已结题

关于#c语言#的问题,如何解决?

谁可以用c语言编写pta上面的气球升起来的题

img


程序设计竞赛时,赛场升起各色气球多么激动人心呀!志愿者送气球忙得不亦乐乎,观战的某人想知道目前哪种颜色的气球送出最多。

输入格式:
测试数据有多组,处理到文件尾。每组数据先输入一个整数n(0<n≤5000)表示分发的气球总数。接下来输入n行,每行一个表示颜色的字符串(长度不超过20且仅由小写字母构成)。

输出格式:
对于每组测试,输出出现次数最多的颜色。若出现并列的情况,则只需输出ASCII码值最小的那种颜色。

输入样例:
3
pink
red
pink
输出样例:
pink

  • 写回答

6条回答 默认 最新

  • qfl_sdu 2022-12-17 11:36
    关注

    运行结果:

    img

    代码:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    //定义颜色结构体
    typedef struct _color
    {
        char color[22]; //颜色
        int nmb; //颜色出现次数
    }Color;
    int main()
    {
        int n, i, j;
        Color cc[5000]; //存储所有的颜色及出现次数
        char tmp[22]; //临时存储读取的颜色
        int cnt = 0; //每组测试数据中不同颜色的个数
        int index = 0; //出现次数最多的颜色再数据中的下标
        while (scanf("%d", &n) != EOF) //读取n,遇到文件结束符结束
        {
            cnt = 0; //每次都要重置这个不同颜色的个数
            for (i = 0; i < n; i++) //读取n个颜色
            {
                scanf("%s", tmp);
                //判断颜色是否已经存在
                for (j = 0; j < cnt; j++)
                {
                    if (strcmp(cc[j].color, tmp) == 0) //比较颜色,如果已经存在,就把这个颜色的数量+1
                    {
                        cc[j].nmb += 1;
                        break;
                    }
                }
                if (j == cnt)//如果新读取的颜色不存在,就把这个颜色添加到数组中,并把该颜色的数量设置为1
                {
                    cc[cnt].nmb = 1;
                    strcpy(cc[cnt].color, tmp); //颜色拷贝到数组元素中
                    cnt++;//不同颜色的个数+1
                }
            }
            //查找出现次数最多的
            index = 0;//记录出现次数最多的颜色下标
            for (i = 1; i < cnt; i++) //遍历颜色结构体数组,找到出现次数最多的颜色,并记录下标
            {
                if (cc[i].nmb > cc[index].nmb) //如果i出现的次数比index多,就更新index
                    index = i;
                else if (cc[i].nmb == cc[index].nmb)//如果两者出现的次数相等,就判断颜色的ASCII值
                {
                    if (strcmp(cc[i].color, cc[index].color) < 0) //如果i的ASCII小,就更新index
                        index = i;  //更新index的值
                }
            }
            //输出
            printf("%s\n", cc[index].color);
        }
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月18日
  • 已采纳回答 12月17日
  • 创建了问题 12月17日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。