lsmCC 发表于 2023-10-24 22:41:22

修改代码

#include <bits/stdc++.h>
using namespace std;
const int N =1010;
int a,b;
int main()
{
    int n,cnt=0;
    cin>>n;
    memset(b,0,sizeof(b));
    for(int i=0;i<n;i++)cin>>a;
    for(int j=0;j<n;j++)
    {
      b]++;
    }
    for(int j=0;j<n;j++)
    {
      if(b]==0)cnt++;
    }
   cout<<cnt<<endl;
}
为什么输出cnt会等于0,而不等于4

isdkz 发表于 2023-10-24 22:41:46

问题出在第一个for循环中的 memset(b,0,sizeof(b)); 这一行代码上。这行代码将数组b的所有元素都设置为0。由于数组b的初始值都是0,所以在第二个for循环中,当 b]++ 执行时,b数组中对应a的元素会自增1。但是在第三个for循环中,当判断 b]==0 时,由于第二个for循环的操作,b数组中对应a的元素已经大于0,所以条件不满足,cnt不会自增。因此,输出的cnt始终为0。

要解决这个问题,可以将第一个for循环中的 memset(b,0,sizeof(b)); 这一行代码删除。这样,数组b的初始值就是未定义的,而不是都为0。这样,在第三个for循环中,当判断 b]==0 时,如果b数组中对应a的元素为0,则cnt自增。这样就能得到正确的cnt值。

陶远航 发表于 2023-10-24 22:41:56

根据给定的代码,输出cnt等于0的原因是在第一个循环中,数组b被初始化为全零。而在第二个循环中,对每个元素a,如果b]等于0,就会将cnt加一。由于b数组一开始全为零,所以对于任意的j,都有b]等于0,导致cnt始终为n,即等于0。

可能的修改如下:

#include <iostream>
#include <vector>
using namespace std;

const int N = 1010;

int main() {
    int n;
    cin >> n;

    vector<int> a(n);
    vector<int> b(N, 0);

    for (int i = 0; i < n; i++) {
      cin >> a[ i];
      b]++;
    }

    int cnt = 0;
    for (int j = 0; j < N; j++) {
      if (b == 0)
            cnt++;
    }

    cout << cnt << endl;

    return 0;
}


这个修改使用了vector代替数组,并将b初始化为全零。然后在第一个循环中,将计数操作放在读取输入的同时进行。接着在第二个循环中,遍历b数组的所有元素,统计为零的个数,从而得到正确的cnt值。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

六翻了 发表于 2023-10-26 10:26:33

你的代码逻辑是这样的:

输入一个整数 n。
输入 n 个整数到数组 a。
将数组 b 全部初始化为0。
遍历 a,对于 a 中的每一个元素 a,增加 b] 的值。
再次遍历 a,对于 a 中的每一个元素 a,如果 b] 的值为0,则增加 cnt 的值。
输出 cnt 的值。
现在的问题是,你发现 cnt 的值总是0,而不是你预期的4。

这个问题的原因在于,你的程序只读入了 n 个整数,然后试图在 b 中找到对应的索引并增加其值。但是,你在第4步中并没有将 b] 的值增加1,而是直接将 a 的值存储到了 b 中。因此,即使你在第5步中检查到 b] 的值为0,也无法增加 cnt 的值,因为 b] 的值并不是你所期望的索引。

要解决这个问题,你需要在第4步中修改 b] 的值,而不是将 a 的值存储到 b 中。这样,当你在第5步中检查到 b] 的值为0时,就可以正确地增加 cnt 的值了。

以下是修改后的代码:
#include <bits/stdc++.h>
using namespace std;
const int N =1010;
int a,b;
int main()
{
    int n,cnt=0;
    cin>>n;
    memset(b,0,sizeof(b));
    for(int i=0;i<n;i++)cin>>a;
    for(int j=0;j<n;j++)
    {
      b]++;
    }
    for(int j=0;j<n;j++)
    {
      if(b]==1)cnt++;
    }
   cout<<cnt<<endl;
}
在这个修改后的代码中,我们将 b] 的值从0修改为1,这样在检查到 b] 的值为1时,就可以正确地增加 cnt 的值了。
页: [1]
查看完整版本: 修改代码