资源描述:
《c-c++语言趣味程序设计编程百例精解(10)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C-C++语言趣味程序设计编程百例精解(10)91.人机猜数游戏由计算机“想”一个四位数,请人猜这个四位数是多少。人输入四位数字后,计算机首先判断这四位数字中有几位是猜对了,并且在对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数是多少为止。例如:计算机“想”了一个“1234”请人猜,可能的提示如下:人猜的整数计算机判断有几个数字正确有几个位置正确112221334421331230412340124342123444游戏结束请编程实现该游戏。游戏结束时,显示人猜一个数用了几次。*问题分析与
2、算法设计问题本身清楚明了。判断相同位置上的数字是否相同不需要特殊的算法。只要截取相同位置上的数字进行比较即可。但在判断几位数字正确时,则应当注意:计算机所想的是“1123”,而人所猜的是“1576”,则正确的数字只有1位。程序中截取计算机所想的数的每位数字与人所猜的数字按位比较。若有两位数字相同,则要记信所猜中数字的位置,使该位数字只能与一位对应的数字“相同”。当截取下一位数字进行比较时,就不应再与上述位置上的数字进行比较,以避免所猜的数中的一位与对应数中多位数字“相同”的错误情况。*程序说明与注释#include#in
3、clude#includeintmain(){intstime,a,z,t,i,c,m,g,s,j,k,l[4];/*j:数字正确的位数k:位置正确的位数*/longltime;ltime=time(NULL);/*l:数字相同时,人所猜中数字的正确位置*/stime=(unsignedint)ltime/2;srand(stime);z=random(9999);/*计算机想一个随机数*/printf("Ihaveanumberwith4digitsinmind,pleaseguess.");fo
4、r(c=1;;c++)/*c:猜数次数计数器*/{printf("Enteranumberwith4digits:");scanf("%d",&g);/*请人猜*/a=z;j=0;k=0;l[0]=l[1]=l[2]=l[3]=0;for(i=1;i<5;i++)/*i:原数中的第i位数。个位为第一位,千位为第4位*/{s=g;m=1;for(t=1;t<5;t++)/*人所猜想的数*/{if(a%10==s%10)/*若第i位与人猜的第t位相同*/{if(m&&t!=l[0]&&t!=l[1]&&t!=l[2]&&t!=l[3]){j+
5、+;m=0;l[j-1]=t;/*若该位置上的数字尚未与其它数字“相同”*/}/*记录相同数字时,该数字在所猜数字中的位置*/if(i==t)k++;/*若位置也相同,则计数器k加1*/}s/=10;}a/=10;}printf("Youhanecorrectlyguessed%ddigits,",j);printf("andcorrectlyguessed%ddigitsinexactposition.",k);if(k==4)break;/*若位置全部正确,则人猜对了,退出*/}printf("Nowyouhavecorrec
6、tlyguessedthewholenumberafter%dtimes.",c);}Nowyouhavecorrectlyguessedthewholenumberafter7times.*思考题猜数游戏。由计算机“想”一个数请人猜,人输入猜的数,如果猜对了,则结束游戏,否则计算机会给出提示,指出人猜的数是太大,还是太小。当一个数猜了20次还未猜中时,应停止猜数者继续游戏的权力,从程序中退出。92.人机猜数游戏(2)将以上游戏(91.人机猜数游戏)双方倒一下,请人想一个四位的整数,计算机来猜,人给计算机提示信息,最终看计算机用几次猜
7、出一个人“想”的数。请编程实现。*问题分析与算法设计解决这类问题时,计算机的思考过程不可能象人一样具完备的推理能力,关键在于要将推理和判断的过程变成一种机械的过程,找出相应的规则,否则计算机难以完成推理工作。基于对问题的分析和理解,将问题进行简化,求解分为两个步聚来完成:首先确定四位数字的组成,然后再确定四位数字的排列顺序。可以列出如下规则:1)分别显示四个1,四个2,……,四个0,确定四位数字的组成。2)依次产生四位数字的全部排列(依次两两交换全部数字的位置)。3)根据人输入的正确数字及正确位置的数目,进行分别处理:(注意此时不出现输入
8、的情况,因为在四个数字已经确定的情况下,若有3个位置正确,则第四个数字的位置必然也是正确的)若输入4:游戏结束。判断本次输入与上次输入的差值若差为2:说明前一次输入的一定为0,本次输入的为2,