//假设rand5能随机生成1~5的5个数(均等概率),利用rand5生成rand7() 1~7(均等概率)
//1. 利用rand5求出rand2(),当rand5生成的数大于2时,一直循环,直到它生成的数为1或者2,且生成1和2的概率均为1/2,因为生成1和生成2的//概率是相等的。
//2. 利用rand2生成0和1(减1即可),连续使用三次,共有8种可能(二进制表示):000 001 010 011 100 101 110 111,当生成的数为000时,重新计算,这样就可以得到1~7范围内的数,且概率是均等的。
int rand7(){ do{ value = (rand5()-1) * 5 + (rand5()-1) }while(value>=21) return value % 7 + 1; }
int rand5(){
return rand()%5 + 1;
}
int rand7(){
int temp;
do{
temp = (rand5()-1)*10+rand5()-1;
}while (temp>12 || temp==0) ;
switch (temp) {
case 12:
return 7;
break;
case 11:
return 6;
break;
case 10:
return 5;
break;
default:
return temp;
}
}
int main(int argc, const char * argv[]) {
int a[7];
int rand;
for(int i=0;i<7;i++){
a[i]=0;
}
for (int i=0; i<1000; i++) {
rand = rand7();
a[rand-1]++;
//printf("%d\n",rand);
}
for (int i=0; i<7; i++) {
printf("[%d] %d\n",i+1,a[i]);
}
return 0;
}