真正随机数的产生
0赞
发表于 2013/11/26 11:14:50
阅读(1009)
今天小明和小红玩游戏,决定如果谁要是输了就要受到惩罚。可是怎么惩罚呢,惩罚的方式小明找了找,找到了这么几条:
1,自己主动激情舌吻10s以上
2,上下对卧,自己做10个俯卧撑
3,脱内衣一件
4,给对方按摩5分钟
5,今天所有的衣服归你洗
6,对视,将对方手捧在脸旁,说五次:我爱你,我要嫁给你.
实行哪一条呢? 问题出来了。这个时候小明用有道词典翻译了上面的句子,写出了一个程序用来决定用哪个惩罚。
程序目的:产生随机数 1-6
执行方法:L 开始 G 结束运行,显示执行结果。
#include #include #include TOTAL 6 TURE 1 FAULT 0 *rules [] = { printf ( scanf( , & (in_number!= printf ( printf ( scanf( , & printf ( (in_key != i = ( i = i % scanf( , & (in_key == printf ( printf (,(i+ printf (, *(rules + system ( }
聪明的小红发现每次如果正确输入L G 输出的结果一直都是 6 。这个时候小红就抗议了,说小明的程序有问题,这六个数字不是随机的。是小明事先安排好的。小明有理说不清啊,只能继续研究。后来查阅到。C语言中 rand()随机函数是伪随机。不是真正的随机。
既然是伪随机,那就要和自己的GF解释清楚啊,解释清楚了还要解决。于是在 37 38 行之间加上语句 :
srand((unsigned)time(NULL));
头文件 #include
作用就是
首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535
然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)
根据需要多次调用rand(),从而不间断地得到新的随机数;
无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果
最终结果:
1 //date : 13/11/25 2 //designer :pengxiaoen 3 // function : lover game 4 5 #include "stdio.h" 6 #include "stdlib.h" 7 #include "conio.h" 8 #include9 10 #define TOTAL 6UL11 #define TURE 112 #define FAULT 013 14 int main ()15 {16 char *rules [6] = {"1 : initiative, tongue kiss more than 10s passionately.",17 "2 : To lie, at the top, to do 10 pushups.",18 "3 : To lie on both sides, in upper part, to do 10 pushups.",19 "4 : Take off a piece of underwear.",20 "5 : You have to wash all of the clothes.",21 "6 : In the eye, take each other next to hand on the face, said five times: I love you, I want to marry you."22 }; 23 char in_number ;24 char in_key;25 int i,j;26 27 printf ("please enter 'L' to start the lover game : ");28 scanf("%c" , &in_number);29 while (in_number!='L')30 { 31 printf (" input error !\n ");32 printf ("please input 'L' to start the game ");33 fflush(stdin);34 scanf("%c" , &in_number);35 }36 37 printf ("please input 'G' to end : ");38 while (in_key != 'G')39 {40 srand((unsigned)time(NULL)); 41 i = (int)rand();42 i = i % (TOTAL);43 scanf("%c" , &in_key);44 if(in_key == 'G')45 {46 printf ("\n\n\n\n\n Accept the punishment! ! ! \n");47 printf (" THE NUMBER IS %d\n ",(i+1));48 printf (" %s\n\n\n\n\n", *(rules + i));49 }50 }51 system ("pause");52 }
OK 搞定,给了时间种子,随机数每次执行都不一样了。基本上实现了随机性。
总结:泡妞也要用头脑