使用数组作为计数器的错误输出

Incorrect output using array as counter

本文关键字:错误 输出 计数器 数组      更新时间:2023-10-16

我正试图通过尝试codeabbey.com上的问题来教自己编程。

我没有得到这个问题的正确输出。

问题:这是一个长度为M的数组,其中数字的范围为1…N,其中N小于等于20。你要遍历它,并计算每个数字出现的次数。

输入数据第一行包含M和N。第二行(相当长的)将包含M个用空格分隔的数字。答案应该包含精确的N个值,用空格分隔。第一次应该给出1-s的量,第二次应该给出2-s的量,以此类推。

数据输入:

10 3

1 2 3 2 3 1 1 1 1 1 3

正确输出:

5 2 3

我输出:

7 3 4

你可以在这里查看

我的代码:

#include <iostream>
using namespace std;
int main()
{
    int arrayLength,range,a;
    cin>>arrayLength>>range;
    int array[20];
    array[20]={0};
    
    for(int i=0; i<arrayLength; i++)
    {   
        cin>>a;
        ++array[a-1];
    }
    for(a=0; a<range; a++)
    {   
    cout<<array[a]<<" ";
    }
    return 0;
}

没有任何错误消息或警告。此外,如果您有任何改进代码的建议,那就太好了。

int array[20];
array[20]={0};

是错误的,因为它使数组未初始化,并试图初始化第21个元素(这是未定义的行为,因为您的数组只有20个元素,请记住索引从0开始)。使用

int array[20] = {0}; // this will initialize all elements to 0

和您的代码将按预期工作。

array[20]={0};初始化第21个元素(不存在)为0。所以你必须使用int array[20] = {0};,它将所有20个元素初始化为零。

同样在代码中,您没有将元素存储到数组中。您只是在读取输入时增加相应的计数。如果是这样,为什么需要将数组初始化为maxlimit呢?只要根据需要声明数组即可。在你的例子中,

int array[range] = {0};

初始化一个包含三个元素的数组(此处为range =3)