问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。 输入格式:第一行是一个整数N,N £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。 输出格式:输出只有一行,即出现次数最多的那个元素值。 输入输出样例 样例输入 5 100 150 150 200 250 样例输出 150
先上代码:
1 #include <stdio.h> 2 using namespace std; 3 4 int main(void) 5 { 6 int n; 7 int num[20+1]; 8 scanf("%d",&n); 9 if (n<=0) 10 return 0; 11 12 for (int i=0 ; i<n ; i ++) 13 { 14 scanf("%d",&num[i]); 15 } 16 17 int max=0 ,tmp=0,res=num[0];//当n=1或n=2时,均返回第一个数 18 for (int i=0; i<n-1; i++) 19 { 20 if (num[i] == num[i+1]) 21 { 22 tmp ++; 23 } 24 else 25 { 26 if (tmp > max) 27 { 28 max = tmp; 29 res = num[i]; 30 } 31 tmp = 0; 32 } 33 } 34 35 if (tmp>max)//最后一个数出现最多 36 printf("%d\n",num[n-1]); 37 else 38 printf("%d\n",res); 39 40 return 0; 41 }
解题思路:
1.n<=0时返回0
2.当n=1或n=2时,返回第一个数
3.遍历统计出现最多的数时,最后一个数的判断需要在循环外再做判断