201312-1出现次数最多的数
作者:互联网
本来挺简单的题做了大半天才整出来,原来想的费劲了,想用两个for来记录相邻不同的数出现的次数,后来又想着用二维数组,还想到了或许可以递归,,,由于咸鱼一条,都没能写出来,还浪费了很多时间。最后才想到可以先记录第一个数出现的次数,再用for记录后面数出现次数,每记录完一个相同的数就与之前记录的m相比较,最后可以得到出现次数最多的数。
#include<stdio.h>
#include<algorithm> //用到此头文件中的排序函数sort
using namespace std;
int main(){
int n,a[1000];
scanf("%d",&n);
for(int i=0;i<n;i++){ //将输入的数据保存在数组中
scanf("%d",&a[i]);
}
sort(a,a+n); //把数组元素从小到大排序
int count=1,num,m; //count记录某个数字出现的次数,num为所求数字,m为其出现的最大次数
int i=0,j; //因为在循环外也用到 i、j,所以设置成全局变量
while(a[i]==a[i+1]&&i<n-2){ //先检查第一个数出现了多少次
count++; i++;
}
num=a[i]; //假设出现次数最多的数就是第一个数
m=count; //其出现最多的次数为count
count=1; //置1,记录后一个数出现的次数
for(j=i+1;j<n-1;j++){ //遍历剩余数组元素,查找是否有比m大的数
if(a[j]==a[j+1]) count++; //注意,此出无法判断最后一个数出现次数与m的大小关系,需在循环完单独判断
else{ //当出现不同的数时
if(count>m){ //判断当前数字个数是否大于m
m=count; //当前数出现的次数多,修改m
num=a[j]; //修改num
}
count=1; //置1,记录后一个数出现的次数
}
}
if(count>m){ //判断最后一个数出现次数与m的关系
m=count;
num=a[j];
}
printf("%d",num);
return 0;
}
代码不长,欢迎交流指导。
标签:count,记录,int,201312,次数,num,最多,出现 来源: https://blog.csdn.net/L_xqqzldh/article/details/88091318