【发布时间】:2016-10-21 12:29:23
【问题描述】:
对于这个程序,我打算在给定范围内生成一定数量的随机整数。例如 0-10 之间的 100 个整数。
我创建了一个分布数组(称为 distTab),它显示了某个数字的生成次数。然后我在 for 循环中将数字打印为星号。检查下面的图片。
这适用于 0-10,但假设我生成 0-1000 之间的 10000 个数字,我的打印函数会打印 distTab 的每个索引。我想按范围切割它并在该范围内相互添加索引值。例如 0-100 -> 20 星,101-200 -> 21 星等。
这是我当前打印直方图的代码:
int inc=0;
printf("\n%s\t%s\n","Number", "Histogram\n");
for(int i=0; i <= max; i++) {
if(distTab[i]==0)
continue;
printf(" %d\t",i);
int lim = distTab[i];
for(int j=1; j<=lim; j++){
printf("*");
inc++;
}
printf("\n");
}
随机数和 distTab 是这样创建的(在 for 循环中):
int distTab[MAX_RAND];
memset(distTab, 0, sizeof distTab);
//for(0 -> desired number of ints)
rnd = (rand() % limit)+1;
if (max < rnd)
max = rnd; //max value generated.
distTab[(int)rnd]++;
//}
提前感谢您抽出宝贵时间,希望我尽可能清楚地解释了我的问题。
【问题讨论】:
-
你试过什么?
-
你需要写一个函数
int myfunc(int value)(我让你找一个更合适的函数名)如果value在0到100之间返回20,如果value在101之间返回21和 200、22 表示value在 201 和 300 之间等。提示:从铅笔和一张纸开始。