这是我的问题
如果某个数字已输入数组,我需要显示该数字并在数组中出现该数字。
例如,如果用户输入数字5三次,那么“数字5到目前为止已输入3次”,依此类推到目前为止,这是我的代码:
int i,j;
int num_count = 0;
for(i=0;i<6;i++) {
num_count = 0;
for(j=1;j<43;j++) {
if( *(num + i) == j) {
printf("The number %d has been used %d times\n",j,num_count);
}//end if
}//end inner for
}//end outer for
答案 0 :(得分:1)
我想建议你一个非常有效的方法,但它需要一些额外的记忆。
假设数组内的数字上限是&#39; MAX_NUM_IN_ARRAY&#39;, 所以你应该创建大小&#39; MAX_NUM_IN_ARRAY + 1&#39;的数组(比如计数器)。并将其初始化为0。
int counter[MAX_NUM_IN_ARRAY+1]={0};
现在从第一个元素到最后一个元素扫描输入数组, 对于每个号码: //说数字是 num 计数器[NUM] ++;
最后你必须从索引1到MAX_NUM_IN_ARRAY扫描那个计数器数组。
示例代码:
假设输入数组是[], 数组中的元素数是n, 数组内部的最大数量限制为MAX_LIMIT
int counter[MAX_LIMIT]={0};
int i;
for(i=0; i<n; i++)
{
counter[a[i]]++;
}
for(i=0; i<MAX_LIMIT; i++)
{
printf("Number %d is appeared for %d times\n", i, counter[i]);
}
答案 1 :(得分:-1)
============ EDIT
您可以编写一系列处理集合的函数。该集合可以是一个二维数组,如numbers[][]
,其中数字[n] [0]是你的数字,数字[n] [1]是它发生的次数...而黄金将是在你的add()函数
add()执行一些操作,用户将值传递给add(),
首先检查数字[n] [0]
中是否存在数字如果值存在于数字[n] [0]
numbers[n][1]++;
如果它还不存在,
检查阵列是否已满
如果已满,请将所有数据复制到新的更大的数组
将它添加到数组的末尾..这是如何做到的。
== OR
设计一个包含所有数字的1维数组numbers[]
..以及仅限add()函数:
if(已满){复制到更大的数组}
在最后添加数字;
并修改我之前写的代码(下图)..打印最常见的数字及其出现次数
============ EDIT
我是一个Java家伙,所以你需要翻译(不应该太难......)
这就像一个带有一点额外逻辑的排序算法(稍后搜索选择排序)
int[] temp = {4,3,2,4,4,5};
////// find the most commonly occuring value
int times;
int moreTimes = 1;
int value = temp[0];
for(int i = 0; i < temp.length; i++) {
times = 1;
for(int j = i+1; j < temp.length; j++) {
if(temp[i] == temp[j])
times++;
}
if(times > moreTimes) {
moreTimes = times;
value = temp[i];
}
}
/////// count the most common value
int count = 0;
for(int i = 0; i < temp.length; i++) {
if(temp[i] == value)
count++;
}
System.out.println("number: " + value + ", count: " + count);