首页 > 代码库 > 数组中有一个数字出现的次数超过数组长度的一半

数组中有一个数字出现的次数超过数组长度的一半

 1 /*
 2 -----------------------------------
 3 动态分配需要的内存大小
 4 输入数组元素的值
 5 通过函数调用,传地址对数组排序
 6 循环每个元素,当循环比较某个值时,如果有相等的,计数加1,比较完成后,和cn比较,如果大于cn,那么说明找到,退出循环
 7 -----------------------------------
 8 */
 9 
10 # include <stdio.h>
11 # include <malloc.h>
12 
13 void findnum(int * arr, int n)
14 {
15     int i, j, count, cn;
16     count = 0;
17     cn = n/2;
18     
19     for (i=0; i<n; i++) //双重for循环,统计元素个数
20     {
21         for (j=0; j<n; j++)
22         {
23             if (arr[i] == arr[j])                
24                 count++;    
25         }                
26         
27         if (count > cn)
28         {
29             printf("超过长度一半的数字是:%d\n", arr[i]);
30             break;        
31         }
32         else if (i==n-1)
33         {
34             printf("无超过长度一半的数字!\n");
35             break;
36         }        
37         count = 0;        
38     }
39     return;
40 }
41 
42 int main(void)
43 {
44     int len, i;
45     int * pArr;
46     char ch;
47     
48     do {
49         
50         printf("请输入数字个数:");
51         scanf("%d", &len); //输入元素个数
52         printf("请输入%d个数字(以空格分隔):", len);
53         pArr = (int *)malloc(sizeof(int)*len); //动态分配内存
54         for (i=0; i<len; i++) //输入值
55             scanf("%d", &pArr[i]); 
56         printf("动态数组元素为:\n");
57         for (i=0; i<len; i++) //输出值
58             printf("%d  ", pArr[i]);
59         printf("\n");
60         
61         findnum(pArr, len); //调用查找函数
62         free(pArr); //释放动态分配的内存
63         
64         printf("\n你想继续么(Y/N):"); //询问是否继续
65         flushall(); //清除缓存
66         scanf(" %c", &ch);
67         //printf("%c\n", ch);
68         
69         
70     }while (y==ch || Y==ch); //如果输入的是Y或者y,表示继续
71     
72     return 0; 
73 }
74 
75 /*
76 在Vc++6.0中的输出结果为:
77 -----------------------------------
78 
79 请输入数字个数:5
80 请输入5个数字(以空格分隔):1 2 3 4 5
81 动态数组元素为:
82 1  2  3  4  5
83 无超过长度一半的数字!
84 你想继续么(Y/N):y
85 请输入数字个数:5
86 请输入5个数字(以空格分隔):1 1 1 2 3
87 动态数组元素为:
88 1  1  1  2  3
89 超过长度一半的数字是:1
90 你想继续么(Y/N):n
91 Press any key to continue
92 
93 -----------------------------------
94 */

 

数组中有一个数字出现的次数超过数组长度的一半