C趣味编程百例(30)人机猜数游戏

C趣味编程百例(30)人机猜数游戏,第1张

C趣味编程百例(30)人机猜数游戏,第2张

91.人机猜谜游戏
计算机“思考”一个四位数。请大家猜猜这个四位数是什么。当一个人输入四位数后,计算机首先判断这四位数中有多少位是对的,正确的位数中有多少位是对的,并显示结果,给出提示,让人们再猜,直到人们猜出计算机要的是什么四位数。
例如,计算机“思考”出一个“1234”,让人们猜。可能的提示如下:
人猜测的整数被计算机判断有几个正确的数字和位置
1122 2 1
3344 2 1
3312 3 0。在游戏结束时,它会显示人们猜测一个数字的次数。
*问题分析与算法设计
问题本身是清楚的。不需要特殊的算法来判断同一位置的数字是否相同。只需截取相同位置的数字进行对比。但在判断几个数字是否正确时,需要注意的是,计算机认为的是“1123”,人猜测的是“1576”,所以正确的数字只有一个数字。
计算机在程序中截取的数字的每一位都与人们猜测的数字进行比较。如果两个数字相同,记住猜对的数字的位置,这样这个数字只能和对应的数字“相同”。截取下一位数字进行比较时,不应与上述位置的数字进行比较,以免出现猜测数字中的一位数字与对应数字中的几位数字“相同”的错误。
*程序和程序注释
# include
# include
# void main()
{
int stime,a,z,t,I,c /*j:正确的位数K:正确的位数*/
long time;
ltime = time(NULL);/*l:当数字相同时,人们猜测的数字的正确位置*/
stime =(unsigned int)ltime/2;
srand(stime);
z = random(9999);/*计算机要一个随机数*/
printf("我脑子里有一个4位数的数,请猜。\ n ");
for(c = 1;;++)/* C:guess count counter */
{
printf("输入一个4位数的数:");
scanf("%d ",& g);/*请人猜*/
a = z;j = 0;k = 0;l[0]= l[1]= l[2]= l[3]= 0;
for(I = 1;I {
s = g;m = 1;
for(t = 1;T {
if(a%10==s%10) /*如果I位与人们猜测的T位相同*/
{
if(m&&t!=l[0]&&t!=l[1]&&t!=l[2]&&t!= l[3])
{
j++;m = 0;l[j-1]= t;/*如果这个位置的数与其他数不“相同”*/
} /*记录相同数时,这个数在猜测数中的位置*/

If(I = = t)k++;/*如果位置相同,计数器K加1 */
}
s/= 10;
}
a/= 10;
}
printf("您猜对了%d位数,\n ",j);
printf("并正确猜出了准确位置的%d位数字。\n”,k);
if(k = = 4)break;/*如果所有位置都正确,则此人猜对了,退出*/
}
printf("现在你已经在% d次后猜对了整数。\ n”,c);
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C趣味编程百例(30)人机猜数游戏

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情