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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组中有一个数字出现的次数超过数组长度的一半相关的知识,希望对你有一定的参考价值。

 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 */

 

以上是关于数组中有一个数字出现的次数超过数组长度的一半的主要内容,如果未能解决你的问题,请参考以下文章

数组中出现次数超过一半的数字

39 数组中出现次数超过一半的数字(时间效率)

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

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

数组中出现次数超过一半的数字-剑指Offer

Java 剑指offer(39) 数组中出现次数超过一半的数字