tugouzhishen 2022-08-30 14:21 采纳率: 88.5%
浏览 95
已结题

宾果游戏C语言 怎么做啊

我的解答思路和尝试过的方法
我想要1. 程序生成一个各个数位不重复的4位整数
  1. 用户从屏幕上输入一个各个数位不重复的4位数字:如果不符合规范(位数不足,有重复数位等)不计入猜测次数,要求用户重新输入。
    
  2. 根据用户输入的数字,显示用户输入的数字与程序生成的数字有几位相同。如果数字相同,位置也相同,记作A;如果数字相同但位置不同记作B。如果用户没有完全猜中,显示xAyB,猜测次数+1,要求用户输入下一个数字;如果用户完全猜中,则显示“BINGO! You use N times!”(显示N)。

例:后台生成的数字为1357

第一次输入1234,提示1A1B

第二次输入5678,提示0A2B

第三次输入1752,提示2A1B

第四次输入1357,提示 BINGO! You use 4 times!达到的结果

  • 写回答

3条回答 默认 最新

  • 快乐鹦鹉 2022-08-30 14:31
    关注

    用随机数生成4位数,判断是否有重复数字,有则重新生成
    将用户输入4位数逐个与随机数比较,如果在随机数中,则判断位置是否相同,相同则记为A,不同则记为B,最后统计A,B的数量。

    #include<stdio.h>
    #include<stdlib.h>
    #include <time.h>
    
    int check(int n)
    {
        int a[10] = {0};
        int i=0;
        if(n<123 || n>9876)
            return 0;
        for(i=0;i<4;i++)
        {
            a[n%10]++;
            n = n/10;
        }
        for(i=0;i<10;i++)
            if(a[i] > 1)
                return 0;
        return 1;
    }
    
    int getData()
    {
        int n = rand()%9754+123;
        while(1)
        {
            if(check(n) == 1)
                break;
            else
                n = rand()%9754+123;
        }
        return n;
    }
    
    void int2char(int n,char r[4])
    {
        for(int i=0;i<4;i++)
        {
            r[i] = n%10;
            n = n/10;
        }
    }
    
    int main()
    {
        int n,m,num,i,j;
        char a[4] = {0},b[4] = {0};
        int nA = 0,nB = 0;
        srand(time(NULL));
        num=1;
        n = getData();
        while(1)
        {
            nA = nB = 0;
            printf("请输入不重复的四位数: ");
            scanf("%d",&m);
            if(check(m) == 0)
            {
                printf("数字不对,重新输入。\n");
                continue;
            }
            if(n==m)
            {
                printf("BINGO! You use %d times!",num);
                break;
            }
            int2char(n,a);
            int2char(m,b);
            for(i=0;i<4;i++)
            {
                for(j=0;j<4;j++)
                {
                    if(a[i] == b[j])
                    {
                        if(i==j)
                            nA++;
                        else
                            nB++;
                    }
                }
            }
            printf("%dA%dB\n",nA,nB);
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月7日
  • 已采纳回答 8月30日
  • 创建了问题 8月30日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助