C语言课题1:猜数字游戏【从基础开始手把手教你】

        你们好呀!这里是@小梁coding~欢迎你们来到我的博客,这是我的第一篇文章,很高兴能够与大家在CSDN上进行学术交流(有问题欢迎在我的评论区下留言,嘿嘿),要想掌握一样技能,就一定要动手动脑实践,并要求我们要将输入输  出相结合,好了话不多数,开始我们的游戏吧!

bfb893f815124b34b265079cc769ce8a.jpeg

游戏简介:该游戏可以由程序随机产生四个0到9之间的数字,且不重复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。A表示位置正确且数字正确,B表示数字正确而位置不正确。当A为4时,即四个数字都猜对即为挑战成功。

输入输出要求:玩家一次性输入四个(0~9)不重复的数字,输出A,B个数判断的结果,若成功则提前输出游戏成功,若八次机会用完还未猜出,则游戏失败,并显示正确答。

ae6696023e0b4051a59259c3aab0b276.png

(利用数组解题) 我们所需要思考的问题是:1.如何让系统产生随机数2.如何实现一次性输入四个数并将其分开存入数组3.如何实现A.B的计数

1.利用srand()函数及rand()函数实现四个随机数的产生time(NULL)

{srand(time(NULL));

    int i,x[4]/*x为随机数*/;

    while(1)
    {for(i=0; i<4; i++)
        x[i]=rand()%10;   /*当while括号里为真时取随机数0~9中的一个赋给x*/
        if((x[0]!=x[1])&&(x[0]!=x[2])&&(x[0]!=x[3])&&(x[1]!=x[2])
&&(x[1]!=x[3])&&(x[2]!=x[3]))      /*不能重复,四个数字都要不同*/
            break;}

2.利用取余%实现一次性输入四个0~9的数并将四个数字分开存入数组

 scanf("%d",&num);
        for(i=0;i<4;i++)
        {
            guess[i]=num%10;
            num=num/10;
        }

是不是发现解决这个问题很简单呢!有许多同学的输入方式都不是一次性输入四个数(但是题目要求我们一次输入4个数),有的打一个数字按一下空格,接着再打一个数字按一下空格最后回车才对AB进行判断,还有的要打一个数字按一次回车,按5次后才进行AB判断

3.利用for循环语句if条件判断语句实现八次循环输入判断与AB计数

  A=0;
for(i=0; i<4; i++)
 {
   if(guess[i]==x[i])
   A++; //数字正确且位置正确,A加1
 }
   B=0;
 for(i=0; i<4; i++)
 for(j=0; j<4; j++)
 {
   if((guess[j]==x[i])&&(i!=j)) //数字正确而位置不正确,B加1
   B++;
        }

4.源代码如下

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main()
{
    srand(time(NULL));

    int i,h,j/*控制输入循环*/,x[4]/*x为随机数*/,guess[4],A,B,num;

    while(1)
    {for(i=0; i<4; i++)
        x[i]=rand()%10;/*当while括号里为真时取随机数0~9中的一个赋给x*/
        if((x[0]!=x[1])&&(x[0]!=x[2])&&(x[0]!=x[3])&&(x[1]!=x[2])&&(x[1]!=x[3])&&(x[2]!=x[3]))
            break;
    }
printf("正确答案为:%d%d%d%d\n",x[3],x[2],x[1],x[0]);
    printf("游戏规则:\n\n该游戏可以由程序随机产生四个不重复的数字\n要求一次性输入这四个数\n玩家可通过提示A.B提示进行八次猜测\nA表示位置正确且数字正确\nB表示数字正确而位置不正确\n");
    printf("只要A为4个则游戏挑战成功\n违反游戏规则游戏提前结束\n");
    printf("祝你顺利!!游戏开始!!\n\n");
    for(h=0; h<8; h++)
    {
        printf("第%d次输入(每输入一次回车):\n",h+1);
        scanf("%d",&num);

        for(i=0;i<4;i++)
        {
            guess[i]=num%10;
            num=num/10;

        }
        if((guess[0]==guess[1])&&(guess[0]==guess[2])&&(guess[0]==guess[3])&&(guess[1]==guess[2])
               &&(guess[1]==guess[3])&&(guess[2]==guess[3])){h--;break;}

        A=0;
        for(i=0; i<4; i++)
        {
            if(guess[i]==x[i])
                A++;
        }
        B=0;
        for(i=0; i<4; i++)
        for(j=0; j<4; j++)
        {
           if((guess[j]==x[i])&&(i!=j))
                B++;

        }
        printf("%dA%dB\n",A,B);
        if(A==4)
        {
            printf("恭喜您!游戏成功!!\ngame over\n");
            h--;
            break;
        }

    }
    if(h==8)
    {
        printf("八次机会已用完,游戏失败\ngame over\n");
        printf("正确答案为:%d%d%d%d\n",x[3],x[2],x[1],x[0]);
    }
printf("违反游戏规则,游戏结束!\n");
    return 0;
}


5.运行结果如下

成功

b1e7afeb84e74c54913519f69a4d8991.png

失败

e658c5508e15402eae3aab22162bb44a.png

 重复提前结束程序(若有更好的解决方法评论区留言)

8c68ba89e96f4cac9f699c59a47a8a2e.png

        解题方式如上,可供参考,有很好方法,欢迎评论区留言,这里是@小梁coding,一个励志要将输入与输出相结合的成长型学生!!

ee6bd284b4054af8905fe89db84391a4.jpeg

 

 

 

  • 17
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@小梁coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值