c++ - 用 C++ 打印直方图
问题描述
我正在尝试使用 for 循环打印直方图,但是由于某种原因,我的第二个循环应该根据 if 条件运行,但它不起作用,我最终"#"
每个计数器只有 1 个。
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
int main () {
char hash = '#';
double list[10];
int size = sizeof(list) / sizeof(list[0]);
for(int i = 0; i < size; i++) {
list[i] = ((rand() % 10000) / 10000.0);
for(int j = 0; j < 10000; j++) {
if
(
(list[i] >= 0 && list[i] <= .1) ||
(list[i] >= .1 && list[i] <= .2) ||
(list[i] >= .2 && list[i] < .3) ||
(list[i] >= .3 && list[i] < .4) ||
(list[i] >= .4 && list[i] < .5) ||
(list[i] >= .5 && list[i] < .6) ||
(list[i] >= .6 && list[i] < .7) ||
(list[i] >= .7 && list[i] < .8) ||
(list[i] >= .8 && list[i] < .9) ||
(list[i] >= .9 && list[i] < 1.0)
)
{
list[i] += 1;
}
}
}
cout << "HISTOGRAM OF 10 COUNTERS " << endl;
for(int i = 0; i < size; i++) {
cout << "[" << i << "] \t" << list[i] << "\t" << string(list[i], hash) << endl;
}
return 0;
}
解决方案
您正在使用
list[]
随机数和直方图那是错的!随机值应存储在 temp 变量中,并在主循环 (
j<10000
) 中生成。for 循环不应该嵌套
第一个 (
i<10
) 应该只是将您的直方图清除为零。第二个应该生成您的随机值,从中计算直方图 bin 索引并将 bin 计数增加一。大
if
条件是不完整的,它应该是(
size=10
)个人或if/else
计算i
索引的条件。它还应该使用临时随机值而不是直方图值:random_value=((rand()%10000)/10000.0); i=-1;if (random_value<0.0); else if (random_value<0.1) i=0; else if (random_value<0.2) i=1; else if (random_value<0.3) i=2; ... else if (random_value<1.0) i=9; if (i>=0) list[i]++;
但是,您的随机值在范围内
<0.0,1.0)
,因此可以通过以下方式完全删除 ifs:random_value=((rand()%10000)/10000.0); i=floor(random_value*double(size)); list[i]++;
有关更多信息,请参阅
您可以在那里找到 C++ 直方图示例 ..