使用函数以相等的概率随机生成数字1到5,并以相同的概率创建一个函数,该函数以相等的概率生成数字1到7。使用给定的随机生成器函数从1到7生成随机数
我修改了以前的答案之一。这是对的吗?
#include <bits/stdc++.h>
#define ran rand()%5
using namespace std;
int main(){
int a[2][5] = {{1, 2, 3, 4, 5}, {6, 7, 0, 0, 0}};
int ct[8] = {0};
for(int i = 0; i<50000000; i++){
int j = ran;
while(j>1){
j = ran;
}
int k = ran;
if(a[j][k]>0)
ct[a[j][k]]++;
}
for(int i = 1; i<=7; i++){
cout<<ct[i]<<endl;
}
return 0;
}
我有以下的输出:
4997165
4998128
4997312
5002487
5000661
4998637
4999720
请告诉我们,如果有什么不对的地方。
这不建议使用宏来“模拟”功能('ran'),但如果你_must_这样做,学会正确保护扩展:'#定义ran(rand()%5)'否则如果在表达式中使用宏,可能会得到意想不到的结果。在这种情况下,按照使用它的方式,它可能并不重要,但对于以不同方式使用的其他宏,它将会如此。 – TripeHound
您将1-5映射到1-7的方式并不理想:我没有研究过它是否预计分发是否统一,但主要问题是您“询问” 5000万的数字,只有3500万。 – TripeHound
@TripeHound的问题是以相等的概率生成所有数字1到7。剩下的一千五百万是我忽略的0。 –