WooKinson

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

  编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印较小的那个值。例如,假设用户输入的是“100 150 150 200 250”,则输出为150。
输入:
  6
  100 150 150 200 200 250
输出:
  150
题目描述

 

代码如下:

 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 }
C解法

 

解题思路:

当数组容量为1时(max=0,tmp=0),输出第一个数字

当数组容量大于1时,每次将当前的输入与前一个数做比较,

  相等时次数+1,不相等时判断此前记录是否为重复数字,重复数字则判断是否要刷新最大次数,并做记录

对于某些重复数字在数组的最后(max=0,tmp>0),将输出最后的数字

 

posted on 2019-01-31 16:57  WooKinson  阅读(288)  评论(0编辑  收藏  举报