c语言编程循环求救,希望编程大哥们指教帮忙 20
题目:输入整数的个数及各整数。输出出现次数最多的数字及出现次数。图一为正确输出的效果,图二为错误的我的源代码如下:#include<stdio.h>voidmain(){...
题目:输入整数的个数及各整数。输出出现次数最多的数字及出现次数。图一为正确输出的效果,图二为错误的我的源代码如下:#include<stdio.h>void main(){ int i=0,k,j,l,h,t,max=0,c[10]={0},a[1000]; scanf("%d",&k); do { scanf("%d",&a[i]); i++; k--; }while(k>0); for(j=0;j<=i;j++) { for(l=0;l<10;l++) { while(a[j]!=0) { t=a[j]%10; if(t==l) c[l]++; a[j]=a[j]/10; } }} for(i=0;i<10;i++) { if(c[i]>max) { max=c[i]; h=i+1;}} printf("%d:%d",h,max);}测试后觉得问题主要是在中间循环,但一直改不出来后来重新输入了一段新的代码,连输入都又错了:#include<stdio.h>void main(){ int i,j,k,h,a[100],l,c[10]={0},max=0; scanf("%d",&k); for(i=0;i<k;i++) { scanf("%d",a[i]); for(l=0;l<10;l++) { do { j=a[i]%10; if(j==l) c[l]++; a[i]=a[i]/10; }while(a[i]!=0); } } for(i=0;i<10;i++) { if(c[i]>max) { max=c[i]; h=i; } } printf("%d:%d",h,max);}
展开
1个回答
展开全部
数据规模不大的情况下,可以用红黑树或AVL建立map<key,value>,每个节点的key记录整数值,value记录出现的次数,如果插入时发现key相同则认为冲突,将对应的value值加1。最后遍历整个二叉树找到value最大的那一项的key值。
数据规模很大时,可以用hash表,选用适当的整数hash函数,解决冲突可用链表法,最后遍历找到出现次数最多的元素。
数据规模很大时,可以用hash表,选用适当的整数hash函数,解决冲突可用链表法,最后遍历找到出现次数最多的元素。
追问
菜鸟表示不懂
追答
如果实在不懂算法,可以用链表/数组+双重循环,在插入时逐一比对链表中的现有结点的数据域,找到匹配则将对应结点的出现次数+1,这是最笨最简单的算法,复杂度为O(n^2),所以只适用于规模较小的情况。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询