注册 登录
编程论坛 C语言论坛

关于定义数组在一个循环外导致数据出错

小星在北方 发布于 2020-12-28 15:07, 1489 次点击
程序代码:
#include "iostream"
using namespace std;
int main ()
{
    int acount[10005],sum,N,i,L,M,num1,num2,j;
    cin >> N;
    while(N--){
        acount[10005] = {0},sum=0;
        cin >>L>> M;//L 代表马路的长度,M 代表区域的数目
        for(i=0; i<M; i++){
            cin >>num1>>num2;//num1,num2表示起始、终点
            for(j=num1; j<=num2; j++)
              acount[j]++;  
        }
        for(i=0; i<=L; i++)
        if(acount[i]!=0) sum++;
        cout << L+1-sum << endl;
    }
    return 0;
}
这个我把数组定义在外面导致答案错了,下面这个我把数组定义在循环里面,答案就对了
程序代码:
#include "iostream"
using namespace std;
int main ()
{
    int N,i,L,M,num1,num2,j;
    cin >> N;
    while(N--){
        int acount[10005] = {0},sum=0;
        cin >>L>> M;//L 代表马路的长度,M 代表区域的数目
        for(i=0; i<M; i++){
            cin >>num1>>num2;//num1,num2表示起始、终点
            for(j=num1; j<=num2; j++)
              acount[j]++;  
        }
        for(i=0; i<=L; i++)
        if(acount[i]!=0) sum++;
        cout << L+1-sum << endl;
    }
    return 0;
}

Expected                              |    Yours
15
                                  |    15
964
                                  |    332
58
                                  |    19
75
                                  |    13
12
                                  |    7
468
                                  |    7
1699
                                  |    7
62
                                  |    7
390
                                  |    7
17
                                  |    2
24
                                  |    2
5
                                  |    2
69
                                  |    2
52
                                  |    0
227
                                  |    0
147
                                  |    0
731
                                  |    0
8
                                  |    0
82
                                  |    0
这是答案错误的地方,还麻烦大家能够帮我找出问题。
3 回复
#2
rjsp2020-12-28 21:28
把差别贴出来,
第一段代码是
int acount[10005];
acount[10005] = {0};

第二段代码是
int acount[10005] = {0}
你认为它们等价?
#3
rjsp2020-12-28 21:34
int acount[10005] = {0};
是定义了一个数组,共有10005个元素,每个元素都被初始化为0;

int acount[10005];
acount[10005] = {0};
是定义了一个数组,共有10005个元素,第10005个元素被赋值为0。(而且根本也不存在第10005个元素)

“初始化”和“赋值”的区别你可以先不需要知道,但第一个是全体为零,第二个是某个元素为零。这区别应该看出来吧
#4
小星在北方2020-12-29 09:41
回复 2楼 rjsp
是我糊涂了,感谢指出,谢谢!
1