首页 > 代码库 > 数组中有一个数字出现的次数超过数组长度的一半
数组中有一个数字出现的次数超过数组长度的一半
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 */
数组中有一个数字出现的次数超过数组长度的一半
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。