嘿!在下面的代碼中,我試圖計算每個非零數的頻率
我的代碼意圖是在freq使用嵌套回圈測驗每個案例后進行更新,但 value offreq沒有更新。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
請有人除錯代碼并修復它。打開以征求建議。
uj5u.com熱心網友回復:
#include <bits/stdc .h>
這不是標準的 C 。不要使用這個。根據需要包括單獨的標準標題。
using namespace std;
這是一個壞習慣。不要使用這個。對您需要的識別符號使用單獨using的宣告,例如using std::cout;,或者只是在代碼中的所有標準前面加上std::(這是大多數人喜歡的)。
int d[大小];
這不是標準的 C 。不要使用這個。改為使用std::vector。
for(int j=0;j<size;j ){ if(d[i]==d[j]){
假設i == 0。當 時,即當 時,條件if(d[i]==d[j])為真。所以接下來發生的事情就是你歸零。i == jj == 0d[0]
現在假設i == 1. 當 時,即當 時,條件if(d[i]==d[j])為真。所以接下來發生的事情就是你歸零。i == jj == 1d[1]
現在假設i == 2. 當 時,即當 時,條件if(d[i]==d[j])為真。所以接下來發生的事情就是你歸零。i == jj == 2d[2]
現在假設i == 3...
因此,您在第一次看到陣列的每個元素時將其歸零,而if(d[i]==d[j])在i != j.
這可以通過將內部回圈更改為
for (int j = i 1; j < size; j ) {
這將輸出freq關閉一個,因為這個回圈不計算第一個元素。更改freq = 0為freq = 1解決此問題。我建議你有一個地方freq = 1。放置此分配的好地方就在內部回圈之前。
請注意,我在運算子周圍使用空格,您也應該這樣做。狹窄的代碼很難閱讀。
這是您的程式的現場演示,已修復所有上述問題。沒有進行其他更改。
uj5u.com熱心網友回復:
要構建直方圖,您實際上需要收集歷史記錄。
例子:
int main() {
int size;
cin >> size;
int d[size];
int hist[size 1]{}; // all zeroes - this is for the histogram
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 ) {
hist[d[i]];
}
for(int i = 0; i < size; i) {
cout << "Frequency of number " << i << " is " << hist[i] << endl;
}
}
注意:VLA(可變長度陣列)不是標準的 C 功能。改為使用std::vector。
size一種稍微不同的方法是在獲取輸入值時不受引數的限制。std::map改為 a 的值count:
#include <iostream>
#include <vector>
#include <map>
int main() {
int size;
if(not (std::cin >> size) or size < 1) return 1;
std::map<int, unsigned long long> hist; // number to count map
for(int value; size-- > 0 && std::cin >> value;) {
hist[value];
}
for(auto[value, count] : hist) {
std::cout << "Frequency of number " << value << " is " << count << '\n';
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514922.html
標籤:C 数组调试记忆数据结构
上一篇:JavaScript-如何根據其他陣列順序對陣列進行排序
下一篇:如何映射陣列未命名的物件陣列
