马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <bits/stdc++.h>
using namespace std;
const int N =1010;
int a[N],b[N];
int main()
{
int n,cnt=0;
cin>>n;
memset(b,0,sizeof(b));
for(int i=0;i<n;i++)cin>>a[i];
for(int j=0;j<n;j++)
{
b[a[j]]++;
}
for(int j=0;j<n;j++)
{
if(b[a[j]]==0)cnt++;
}
cout<<cnt<<endl;
}
为什么输出cnt会等于0,而不等于4
你的代码逻辑是这样的:
输入一个整数 n。
输入 n 个整数到数组 a。
将数组 b 全部初始化为0。
遍历 a,对于 a 中的每一个元素 a[j],增加 b[a[j]] 的值。
再次遍历 a,对于 a 中的每一个元素 a[j],如果 b[a[j]] 的值为0,则增加 cnt 的值。
输出 cnt 的值。
现在的问题是,你发现 cnt 的值总是0,而不是你预期的4。
这个问题的原因在于,你的程序只读入了 n 个整数,然后试图在 b 中找到对应的索引并增加其值。但是,你在第4步中并没有将 b[a[j]] 的值增加1,而是直接将 a[j] 的值存储到了 b 中。因此,即使你在第5步中检查到 b[a[j]] 的值为0,也无法增加 cnt 的值,因为 b[a[j]] 的值并不是你所期望的索引。
要解决这个问题,你需要在第4步中修改 b[a[j]] 的值,而不是将 a[j] 的值存储到 b 中。这样,当你在第5步中检查到 b[a[j]] 的值为0时,就可以正确地增加 cnt 的值了。
以下是修改后的代码:#include <bits/stdc++.h>
using namespace std;
const int N =1010;
int a[N],b[N];
int main()
{
int n,cnt=0;
cin>>n;
memset(b,0,sizeof(b));
for(int i=0;i<n;i++)cin>>a[i];
for(int j=0;j<n;j++)
{
b[a[j]]++;
}
for(int j=0;j<n;j++)
{
if(b[a[j]]==1)cnt++;
}
cout<<cnt<<endl;
}
在这个修改后的代码中,我们将 b[a[j]] 的值从0修改为1,这样在检查到 b[a[j]] 的值为1时,就可以正确地增加 cnt 的值了。
|