您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C语言 >> 辅导 >> 正文    
  C趣味编程百例(30)人机猜数游戏 【注册男护士专用博客】          

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

www.nanhushi.com     佚名   不详 

91.人机猜数游戏
   由计算机“想”一个四位数,请人猜这个四位数是多少。人输入四位数字后,计算机首先判断这四位数字中有几位是猜对了,并且在对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数是多少为止。
   例如:计算机“想”了一个“1234”请人猜,可能的提示如下:
      人猜的整数         计算机判断有几个数字正确         有几个位置正确
         1122                        2                           1
         3344                        2                           1
         3312                        3                           0
         4123                        4                           0
         1243                        4                           2
         1234                        4                           4
                                                              游戏结束
   请编程实现该游戏。游戏结束时,显示人猜一个数用了几次。
*问题分析与算法设计
   问题本身清楚明了。判断相同位置上的数字是否相同不需要特殊的算法。只要截取相同位置上的数字进行比较即可。但在判断几位数字正确时,则应当注意:计算机所想的是“1123”,而人所猜的是“1576”,则正确的数字只有1位。
   程序中截取计算机所想的数的每位数字与人所猜的数字按位比较。若有两位数字相同,则要记信所猜中数字的位置,使该位数字只能与一位对应的数字“相同”。当截取下一位数字进行比较时,就不应再与上述位置上的数字进行比较,以避免所猜的数中的一位与对应数中多位数字“相同”的错误情况。
*程序与程序注释
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void main()
{
   int stime,a,z,t,i,c,m,g,s,j,k,l[4];    /*j:数字正确的位数  k:位置正确的位数*/
   long ltime;
   ltime=time(NULL);       /*l:数字相同时,人所猜中数字的正确位置*/
   stime=(unsigned int)ltime/2;
   srand(stime);


   z=random(9999);        /*计算机想一个随机数*/
   printf("I have a number with 4 digits in mind,please guess.\n");
   for(c=1;;c++)         /*c: 猜数次数计数器*/
   {
      printf("Enter a number with 4 digits:");
      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++;m=0;l[j-1]=t;    /*若该位置上的数字尚未与其它数字“相同”*/
               }                       /*记录相同数字时,该数字在所猜数字中的位置*/
            
            if(i==t) k++;         /*若位置也相同,则计数器k加1*/
         }
         s/=10;
      }
      a/=10;
   }
   printf("You hane correctly guessed %d digits,\n",j);
   printf("and correctly guessed %d digits in exact position.\n",k);
   if(k==4) break;         /*若位置全部正确,则人猜对了,退出*/
   }
   printf("Now you have correctly guessed the whole number after %d times.\n",c);
}

*运行示例


    Now you have correctly guessed the whole number after 7 times.

*思考题
   猜数游戏。由计算机“想”一个数请人猜,人输入猜的数,如果猜对了,则结束游戏,否则计算机会给出提示,指出人猜的数是太大,还是太小。当一个数猜了20次还未猜中时,应停止猜数者继续游戏的权力,从程序中退出。

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目