循环遍历数组,找出出现次数最多的,记录后再改为0,那么第二次遍历就是出现次数第二多的,循环结束,数组所有元素的值都应为0。
开始没有考虑到比最大数字小的数字不一定都会出现,漏写最后的if判断,导致只能拿50分 T_T
#include <stdio.h> int main() { int n,i,j; scanf("%d",&n); int a[1002]={0}; int max=0; for(i=0;i<n;i++) { int y; scanf("%d",&y); max=max>y?max:y; //max表示出现的数字的最大值 a[y]++; } for(i=0;i<max;i++) { int Max=a[0],temp=0; //Max表示某个数字出现次数的最大值、temp表示该数字 for(j=1;j<=max;j++) { Max=Max>a[j]?Max:a[j]; } for(j=0;j<=max;j++) { if(Max==a[j]) { temp=j; a[j]=0; break; } } if(Max!=0) printf("%d %d\n",temp,Max); //if语句判断是否需要输出 最大值为max, //说明至多需要输出max句语句(1-max均出现过) } //没有if判断可能会输出“某个数字出现零次” return 0; }