这是我的问题

如果已将某个数字输入到数组中,则需要显示该数字并在数组中显示该数字。

例如,如果用户三次输入数字5,则“到目前为止已经输入了3次数字5”,依此类推

到目前为止,这是我的代码:

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

最佳答案

我想为您建议一个非常省时的方法,但是它需要一些额外的内存。

假设数组中数字的上限为“ MAX_NUM_IN_ARRAY”,
因此您应该创建大小为“ MAX_NUM_IN_ARRAY + 1”的数组(例如计数器)并将其初始化为0。

int counter[MAX_NUM_IN_ARRAY+1]={0};


现在从第一个元素到最后一个元素扫描输入数组,
对于每个数字:
    //说数字是num
    counter [num] ++;

最后,您只需扫描从索引1到MAX_NUM_IN_ARRAY的计数器数组。

样例代码:

假设输入数组是a [],
数组中的元素数为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]);
}

08-04 14:36