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

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

img


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

输入格式:
测试数据有多组,处理到文件尾。每组数据先输入一个整数n(0

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

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

运行结果:

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;
}


这就是统计各个单词的出现次数啊

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    char s[5000][21],color[21];
   int count[5000] = {0};
   int n=0,m=0,i,j,max;
   while(scanf("%d",&n) != EOF)
   {
       m=0;
       for(i=0;i<n;i++)
       {
           scanf("%s",color);
           for(j=0;j<m;j++)
           {
               if(strcmp(s[j],color) == 0)
               {
                   count[j]++;
                   break;
               }
           }
           if(j==m)
           {
               strcpy(s[m],color);
               count[m] = 1;
               m++;
           }
       }
       //
       for(i=0;i<m;i++)
       {
           if(i==0 || max < count[i])
               max = count[i];
       }
       j=-1;
       for(i=0;i<m;i++)
       {
           if(count[i] == m)
           {
              if(j==-1 || strcmp(s[j],s[i]) > 0)
                  j=i;
           }
       }
       printf("%s\n",s[j]);
    }
    return 0; 
}

下列代码实现了从输入中读取多组数据,并输出出现次数最多的颜色的功能,望采纳,有问题可以再交流

#include <stdio.h>
#include <string.h>

#define MAX_N 5000
#define MAX_LEN 20

int main()
{
    int n;
    while (scanf("%d", &n) == 1) {
        // 建立一个颜色数组和次数数组
        char colors[MAX_N][MAX_LEN + 1];
        int counts[MAX_N];
        memset(counts, 0, sizeof(counts));

        // 读入颜色并计数
        for (int i = 0; i < n; i++) {
            scanf("%s", colors[i]);
            for (int j = 0; j < i; j++) {
                if (strcmp(colors[i], colors[j]) == 0) {
                    counts[j]++;
                    break;
                }
            }
            counts[i]++;
        }

        // 查找最大值和最小值
        int max_count = -1;
        int min_color = 256;
        for (int i = 0; i < n; i++) {
            if (counts[i] > max_count || (counts[i] == max_count && colors[i][0] < min_color)) {
                max_count = counts[i];
                min_color = colors[i][0];
            }
        }

        // 输出结果
        printf("%s\n", colors[min_color]);
    }

    return 0;
}
#include <stdio.h>
#include <string.h>

#define MAX_COLORS 5000

typedef struct {
    char name[21];
    int count;
} Color;

int main()
{
    int n;
    while (scanf("%d", &n) == 1) {
        Color colors[MAX_COLORS];
        int color_count = 0;
        for (int i = 0; i < n; i++) {
            char name[21];
            scanf("%s", name);
            int found = 0;
            for (int j = 0; j < color_count; j++) {
                if (strcmp(colors[j].name, name) == 0) {
                    colors[j].count++;
                    found = 1;
                    break;
                }
            }
            if (!found) {
                strcpy(colors[color_count].name, name);
                colors[color_count].count = 1;
                color_count++;
            }
        }

        Color most_common;
        strcpy(most_common.name, colors[0].name);
        most_common.count = colors[0].count;
        for (int i = 1; i < color_count; i++) {
            if (colors[i].count > most_common.count ||
                (colors[i].count == most_common.count && strcmp(colors[i].name, most_common.name) < 0)) {
                strcpy(most_common.name, colors[i].name);
                most_common.count = colors[i].count;
            }
        }

        printf("%s\n", most_common.name);
    }

    return 0;
}

详细代码加注释:

img


望采纳