【输入描述】一批整数,表示参与活动的学生编号,各个整数之间用空格分隔,最后一个整数为0,表示输入结束。
【输出描述】一个或几个整数,为参与活动最多的成员编号,如果有多个成员编号,按从小到大的编号输出,两个编号之间用一个空格分隔。
有没有模拟数据
#include<stdio.h>
int main(){
const int MAX = 200;
int num[MAX]={0}, out[MAX], n;
while (scanf("%d",&n) && n)num[n]++;
int maxnum=0, j=0;
for(int i=0;i<MAX;i++){
if(num[i]==0) continue;
if(num[i]>maxnum){
maxnum = num[i];
j = 1;
out[0]=i;
}else if(num[i]==maxnum){
out[j++] = i;
}
}
for(int i=0;i<j-1;i++) printf("%d ",out[i]);
printf("%d\n",out[j-1]);
return 0;
}
// 5 13 21 7 65 7 21 38 82 21 33 21 0
要保证MAX大于你的编号的最大值就行。
#include<stdio.h>
#define STUDENT_COUNT 100
int main(){
int activity[STUDENT_COUNT + 1] = {0};
int most_activity = 0;
int n;
printf("Please enter student number (1 ... %d) and finished by 0.\n", STUDENT_COUNT);
while (scanf("%d", &n) && n)
{
if (n < 0 || n > STUDENT_COUNT)
{
printf("Ignored invalid student number which must between 1 and %d.\n", STUDENT_COUNT);
continue;
}
if (++activity[n] > most_activity)
most_activity = activity[n];
}
printf("Student number(s) with most activities: \n");
for (int i = 1; i <= STUDENT_COUNT; ++i)
if (activity[i] == most_activity)
printf("%d ", i);
printf("\n");
return 0;
}
// Output
Please enter student number (1 ... 100) and finished by 0.
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 2 4 6 8 2 4 6 8 11 12 13 14 15 16 0
Student number(s) with most activities:
2 4 6 8
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html