谁可以用c语言编写pta上面的气球升起来的题
输入格式:
测试数据有多组,处理到文件尾。每组数据先输入一个整数n(0
输出格式:
对于每组测试,输出出现次数最多的颜色。若出现并列的情况,则只需输出ASCII码值最小的那种颜色。
输入样例:
3
pink
red
pink
输出样例:
pink
运行结果:
代码:
#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;
}
详细代码加注释: