与随机数相关的小程序

        这学期的课程是前所未有过的紧张,前几天终于结课了!中间休息了两天,然后这两天又开始做课程设计了!

        在休息的这两天,闲来无事做了个小程序,又在网上找了暑假实习生的职位,投了广州的CVT,做了一套专业题,虽然题目没做完,但是其中有一题让我很受益!先来说说我的那个小程序吧!我当时就想实现以下,N年前在文曲星上玩过的最简单的游戏猜数字!(呵呵,我知道这个程序,只要是个学过编程语言的都会。)那我就说点不一样的吧,先上代码:

/*本代码是:猜数字游戏(可多局玩)的源代码!*/
#include<stdio.h>
/*下面的rand()函数包含于头文件stdlib.h中*/
#include<stdlib.h>
#include<time.h>
main()
{
	int a=0,b=0;
	struct tm *newtime;
	long ltime;
	
	while(1)
	{
		printf("Hello, My friend,if you want to close this game,please input 'z'!\nIf you want to play this game,please input a char ,it isn't 'z'!\n");
		if(getchar()=='z')
		{
			break;
		}
		else
			{
				time(&ltime);
				newtime=gmtime(&ltime);
				/*printf("%d",newtime->tm_sec);*/
				/*上面的printf语句是为了输出当前系统时间中的秒数。*/
				a=rand()%100+rand()%(newtime->tm_sec);
				printf("Please guess the number(please input a interger number):\n");
				scanf("%d",&b);
				while(1)
				{
					if(a>b)
					{
						printf("Your number is low!Please input again:\n");
						scanf("%d",&b);
					}
					else
						if(a<b)
						{
							printf("Your number is high!Please input again:\n");
							scanf("%d",&b);
						}
						else
							if(a==b)
							{
								printf("OK!You are right!\n");
								break;
							}
				}
				getchar();
				/*接受最后这个数,即正确数字输入后的回车符!*/
			}
	}
}

我第一次做的时候不是这样的,我当时仅仅用了rand()%100,这样以来程序虽然可以运行,但是太没意思了,因为每次猜的数字都一样,虽然第一次肯能要多次才能猜对,但是只要猜对后,下次猜时肯定还是这个数,只要记住这个数,除了第一次,以后每次猜时一次肯定能猜对。

        这是因为rand()函数是个伪随机函数,即用这个函数产生的数都不是绝对的随机数,虽然现在我们没有办法产生绝对的随机数,但是我们有办法,产生一些改善的伪随机数,我当时就在想别人以前肯定也遇到过这类问题,网上肯定有解决办法,但是我还是想自己先动动脑子,如果实在做不出来,再去google或baidu吧!

         最后,我还是想出了自己的方法,由于随机数的特性是没有规律变化的,rand()函数只是实现了一次没有规律的数,但是没有变化。我当时在想计算机中哪种东西是变化的呢?最后我想到了系统时间。于是我的想法是在rand()%100的基础上,在与(rand()%(当前系统时间的秒数))结合,这样就会产生相对效果好点的随机数了!具体实现见上面的代码吧!

 

本文是原创,转载请注明出处!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值