![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印较小的那个值。例如,假设用户输入的是“100 150 150 200 250”,则输出为150。 输入: 6 100 150 150 200 200 250 输出: 150
代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 int main(void) 6 { 7 int i,len,tmp,res,max; 8 int num[20]; 9 memset(num,0,sizeof(num)); 10 scanf("%d",&len); 11 12 max=tmp=0; 13 for (i=0 ; i<len ; i++) 14 { 15 scanf("%d",&num[i]); 16 17 if (i>0)//可以进行比较 18 { 19 if (num[i] == num[i-1]) //为重复数字 20 { 21 tmp ++; 22 } 23 else 24 { 25 if (tmp > 0)//断点处前为重复数字串 26 { 27 if (tmp > max) //该重复数字串刷新最大重复次数 28 { 29 max = tmp; 30 res = num[i-1]; //记录数组中的最大重复数 31 } 32 tmp = 0; 33 } 34 } 35 36 } 37 } 38 39 if (max==0 && tmp==0) //没有重复数字,输出第一个数 40 res = num[0]; 41 else if (max==0 && tmp>0) //有重复数字,且在数组的最后 42 res = num[i-1]; 43 44 printf("%d",res); 45 return 0; 46 }
解题思路:
当数组容量为1时(max=0,tmp=0),输出第一个数字
当数组容量大于1时,每次将当前的输入与前一个数做比较,
相等时次数+1,不相等时判断此前记录是否为重复数字,重复数字则判断是否要刷新最大次数,并做记录
对于某些重复数字在数组的最后(max=0,tmp>0),将输出最后的数字