WHCSRL 技术网

使用C语言--编写人机猜数游戏

由计算机产生一个四位数,请人猜这四位整数是多少。人输入一个四位数后,计算机首先判断
其中有几个位被猜对,并且将猜对的数打印出来,给人提示,请人在猜
当猜对时显示出结果

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{
    int seed, a, z = 0, t, i, c, m, g, s, j, k, arr[4];
    long ltime;
    ltime = (unsigned int)time(NULL);//用时间戳设置随机起点,只有用时间戳设置的随机数每次执行完才会变化成新值
    seed = ltime / 2;//除2表示缩小时间戳产生的数值
    srand(seed);
    //将时间戳产生的值固定在四位数之间
    if ((rand() %% 10000) >= 1000 && (rand() %% 10000) <= 9999)
    {
        z = rand() %% 10000;//z为机器产生的四位数随机值
    }
    printf("机器已经设置好四位数**** ");
    printf("%%d", z);
    printf(" ");
    for (c = 1;; c++)//c记录人所猜的次数
    {
        printf("请输入你猜的四位数:");
        scanf_s("%%d", &g);
        printf("提示: ");
        a = z; j = 0; k = 0; arr[0] = arr[1] = arr[2] = arr[3] = 0;
        for (i = 1; i < 5; i++)//i表示随机值中的某位数
        {
            s = g;//猜数值给s,保证猜数值g不会丢失
            m = 1;//
            for (t = 1; t < 5; t++)//t表示猜想值中的某位数
            {
                if (a %% 10 == s %% 10)//随机值最后一位与猜想值最后一位比较
                {
                    //最后一位数字不同
                    if (m && t != arr[0] && t != arr[1] && t != arr[2] && t != arr[3])
                    {
                        j++;
                        m = 0;
                        printf("猜想值与随机值相同的数有%%d ", s %% 10);
                        arr[j - 1] = t;//记录相同数字时,该数字在所猜数字中的位置
                    }
                    if (i == t)
                    {
                        k++;//两数位置相同即数也相同,计数器k加1
                        printf("你猜的数中倒数第%%d个数的位置相同,而且值相等为%%d ", i, a%%10);
                    }
                }
                s /= 10;
            }
            a /= 10;
        }
        printf(" 总共有%%d个数字相同,%%d个位置相同 ", j, k);//j记录相同数的个数,k记录几个数的位置相同
        if (k == 4)
        {
            printf("****你猜对了**** ");
            break;
        }
    }
    printf("你总共猜了 %%d 次 ", c);
    return 0;
}
 

推荐阅读