嘿!在下面的代码中,我试图计算每个非零数字的频率
我的代码意图是在使用嵌套循环测试每个用例后更新freq
,但freq
的值没有更新。freq
的值仍然为0或1。我尝试调试,但仍然以相同的错误结束。
- 代码 *:
#include <bits/stdc++.h>
using namespace std;
int main() {
int size;
cin>>size;
int freq=0;
int d[size];
for(int i=0;i<size;i++){ //To create array and store values in it
cin>>d[i];
}
for(int i=0;i<size;i++){
if(d[i]==0 )continue;
for(int j=0;j<size;j++){
if(d[i]==d[j]){
freq=freq+1;
d[j]=0;
}
}
cout<<"Frequency of number "<<d[i]<<" is "<<freq<<endl;
d[i]=0;
freq=0;
}
}
- 输入 *:
5
1 1 2 2 5
- 预期输出 *:
Frequency of number 1 is 2
Frequency of number 2 is 2
Frequency of number 5 is 1
- 实际产量 *:
Frequency of number 0 is 1
Frequency of number 0 is 1
Frequency of number 0 is 1
Frequency of number 0 is 1
Frequency of number 0 is 1
有人请调试代码并修复它。打开以获得建议。
2条答案
按热度按时间vx6bjr1n1#
#include <bits/stdc++.h>
这是not standard C++。不要使用它。包含您需要的个别标准信头。
using namespace std;
这是a bad habit。不要使用它。要么使用单独的
using
声明来表示你需要的标识符,比如using std::cout;
,要么在代码中的所有标准元素前面加上std::
(这是大多数人喜欢的)。int d[大小];
这是not standard C++。不要使用这个。使用
std::vector
代替。假设
i == 0
,条件if(d[i]==d[j])
在i == j
时为真,也就是说,在j == 0
时为真,那么接下来发生的事情就是把d[0]
清零。现在假设
i == 1
,条件if(d[i]==d[j])
在i == j
时为真,也就是说,在j == 1
时为真,那么接下来发生的事情就是把d[1]
清零。现在假设
i == 2
,条件if(d[i]==d[j])
在i == j
时为真,也就是说,在j == 2
时为真,那么接下来发生的事情就是把d[2]
清零。现在假设
i == 3
...所以你第一次看到数组的时候就把它的每个元素都清零了,当
i != j
时,if(d[i]==d[j])
永远不会变成真。这可以通过将内部循环更改为
这将输出
freq
,它相差1,因为这个循环不计算第一个元素。将freq = 0
改为freq = 1
来解决这个问题。我建议在有freq = 1
的地方加上 one。把这个赋值语句放在内部循环之前是个好地方。注意,我在操作符周围使用了空格,您也应该这样做。
Here是你的程序的一个现场演示,上面提到的所有问题都被修复了。没有做其他的修改。
wh6knrhe2#
要构建直方图,实际上需要收集历史记录。
示例:
注意:VLA(可变长度数组)不是标准的C++功能。请改用
std::vector
。另一种稍有不同的方法是在获取输入值时不受
size
参数的限制。std::map
将值转换为count
: