我最近开始学习C,并且遇到了这个小测试。找到数组中最频繁的数字
制作从用户读取10个号码的代码。
打印最大&输入的值最小,然后打印最常用的数字。
对我来说一切都很简单,但最频繁的数字让我发疯,我搜索了一段时间,找不到任何明确的答案。
的代码,我写
#include <stdio.h>
#include <stdlib.h>
int main()
{
int hi[10], i=0, largest, smallest;
while(i<10)
{
printf("Enter a number:");
scanf("%d", &hi[i]);
i++;
}
smallest = hi[0];
largest = hi[0];
printf("Entered Numbers: ");
while(i!=0)
{
if(hi[10-i] < smallest) { smallest = hi[10-i]; }
if(hi[10-i] > largest) { largest = hi[10-i]; }
printf("%d | ", hi[10-i]);
i--;
}
printf("\nLargest number is = %d || Smallest number is = %d", largest, smallest);
return 0;
}
我想到的唯一的想法是:
制作另一个数组。
在原始数组中获取[i]的值。
将[i]与原始数组的其余值(如果它们相等或不相等)进行比较。
如果它们相等,则增加另一个数组的值。
检查另一个数组中的最大值并且应该是最频繁的数字。
现在,我知道最频繁元素的顺序以及输入元素的次数。
@Vittorio Romeo:嗯,是的,这似乎是OP已经想出的解决方案。这对我来说似乎很明智。 – doynax
看看这里提供的解决方案:http://stackoverflow.com/questions/26566265/frequency-of-numbers-in-a-1d-array并编辑它以满足您的需求。 –
对数组进行排序。然后在for循环中枚举hi [0] .. h [9]中的数组中的项。然后使用额外的变量来跟踪重复计数。 – selbie