有21根火柴,两人依次取,每次每人只可取走1~4根,不能多取,也不能不取,谁先取得最后一,火柴谁输。请编写程序一个人机对弈程序,要求人先取,计算机后取,保证计算机为“常胜将军”即一直赢。
问题分析:
因为取得最后一根火柴的人为输且要保证电脑每次都赢,则最后一根火柴必须让人取得,这样就变成20根火柴只要保证20根火柴的最后一根被电脑取得就可以了,因为要求人先取火柴电脑后取,所以20根中只剩下5根时人先取,不管人取多少最后一根,必定落到电脑手中,依次类推15,10,直到一开始的5根火柴人先取,也是不管人取多少最后一根,必定落到电脑手中,所以只要保证每一轮的抽取中,人的取数+电脑的取数=5且每轮人先取,则最后的常胜将军必然是电脑
算法设计:
人先取数1~4根,显示火柴剩余数量,电脑再取数=5-(人取数1~4根),保证第5,10,15,20根都被电脑取走,则在总数21根中最后一根必然被人取走,如此电脑就是“常胜将军”
所以当火柴数为0时谁赢(但必然每次都是电脑赢)

#include<stdio.h>
void menu();
void game();
int main()
{
    int input = 0;
    do
    {
        menu();//菜单选择 
        scanf("%d", &input);
        switch (input)//输入1进入case 1,输入0进入case 0 
        {
        case 1:
            game();//开始游戏 
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default://除了case 1和case 0之外的选择 
            printf("菜单栏选项错误,请重新选择:\n");
            break;
        }
    } while (input);
    return 0;
}
//编写菜单栏
void menu()
{
    printf("------------------------------------\n");
    printf("------你不可能战胜我,不信试试------\n");
    printf("------1.play        0.exit------\n");
    printf("------------------------------------\n");
    printf("请选择(1/0):\n");
}
//实现游戏
void game()
{
    int computer, people, match = 21;
    while (1)
    {
        printf("------------火柴数<%d>根------------\n", match);
        printf("人取数:");
        scanf("%d", &people);
        if (people < 1 || people>4 || people > match)
        {
            printf("取火柴数不符合规则,请重新取数:\n");
            continue;
        }
        match -= people;
        if (match == 0)
        {
            printf("\n你输了,电脑赢\n");
            printf("\n************************************\n");
            break;
        }
        computer = 5 - people;
        match -= computer;
        printf("电脑取数:%d\n",computer);
        if (match == 0)
        {
            printf("\n电脑输了,你赢\n");
            printf("\n************************************\n");
            break;
        }
    }
}

C语言------实现抢21根火柴的小游戏相关推荐

  1. 头歌23根火柴的小游戏

    任务描述 本关任务:火柴游戏. 相关知识 为了完成本关任务,你需要掌握:C 语言基础. 火柴游戏 23 根火柴游戏.请编写一个简单的 23 根火柴游戏程序,实现人跟计算机玩这个游戏的程序.为了方便程序 ...

  2. c语言假设有21根火柴棍,10道火柴棍趣味智力题,据说全对的都是天才!

    原标题:10道火柴棍趣味智力题,据说全对的都是天才! 各位小朋友及大朋友们,晚上好!欢迎来到科学有意思栏目.发现身边有趣的科学现象,激发孩子好奇心! 相信很多80后的朋友们,小时候一定和同学玩过各种趣 ...

  3. 21根火柴取放 c语言,趣味C语言题Word版

    <趣味C语言题Word版>由会员分享,可在线阅读,更多相关<趣味C语言题Word版(21页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ,希望对您有帮助,可双击 ...

  4. 21根火柴常胜将军c语言,常胜将军算法

    甲和乙两人玩抽取火柴的游戏,共有21根火柴.每人每次最多取4根,最少取1根火柴.如果某个人取到最后一根火柴则输了.甲让乙先抽取,结果每次都是甲赢.这是为什么? 算法分析:甲要每次都赢,那么每次甲只给乙 ...

  5. 21根火柴游戏【C语言实现】

    题目 21根火柴游戏.现有21根火柴,两人轮流取,每人每次可以取1至4根,不可多取(假如多取或者取走的数量不在合法的范围内,则要求重新输入),也不能不取,谁取最后一根火柴谁输.请编写一个程序进行人机对 ...

  6. 21 根火柴游戏(常胜将军)

    问题来自头歌 任务描述 本关任务:火柴游戏. 相关知识 为了完成本关任务,你需要掌握:C 语言基础. 火柴游戏 21 根火柴游戏.现有 21 根火柴,两人轮流取,每人每次可以取 1 至 4 根,不可多 ...

  7. Craps赌博游戏、百钱白鸡、七星彩选号、抓小偷、21根火柴、10000以内完美数

    Craps赌博游戏 游戏规则:同时扔两颗骰子,第一次扔出的点数数7或则11玩家胜,扔出2.3或则12庄家胜利,否则继续扔骰子. 以后只要扔出和第一次相同的点数玩家胜,扔出7庄家胜. 玩家每次进入有10 ...

  8. python 实现21根火柴游戏

    游戏规则::有21根火柴,人和计算机轮流拿,人先拿(输入拿几根)计算机后拿,每次至少1根最多4根,拿到最后一根火柴的算输,要确保计算机一定可以获胜 tips:保证计算机最后能拿到20,所以就不能取16 ...

  9. C#,21根火柴棍问题(21 Matchticks Problem)的算法与源代码

    一.21根火柴棍问题(21 Matchticks Problem) 21根火柴棍问题是西方经典游戏之一. 给定21根火柴,2个人A和B(比如:分别是计算机和用户). 每个人一次可以挑选 1-- 4 根 ...

最新文章

  1. JavaScript cookie
  2. Create Geometry from WKT(转载)
  3. Caffe常用层参数介绍
  4. wdpc搭建https网站
  5. FPGA的发展历史及相关名词解释
  6. 手机知识:手机蓝牙有6个使用场景,你都知道吗?
  7. 数据分析能不能替代Data Mining?
  8. css的9个常用选择器
  9. go mock mysql_go sqlmocks的使用
  10. Java项目—在线考试系统
  11. 基于 ANTLR 自己实现一个 SQL 解析器
  12. 三十八、C++ 信号捕获
  13. 基于Python的决策树分类器与剪枝
  14. python中loc和iloc
  15. java计时器StopWatch
  16. 蓝桥杯Web应用开发
  17. 劳动合同到期,公司提出不续签怎么办?
  18. CC2541之OAD
  19. 黑马程序员Android学习笔记——金山卫士项目——第四天
  20. 美图秀秀2013年6月5日实习生招聘题目

热门文章

  1. SpringBoot 如何配置静态资源的地址与访问路径
  2. BootstrapTable冻结表头(一)
  3. 轻松搞定RocketMQ入门 1
  4. HBase基本概念与基本使用
  5. BZOJ 2818GCD
  6. Flutter TextField 设置默认值和光标位置
  7. android 自定义水波纹点击效果Button
  8. JavaScript设计模式返璞归真
  9. 【机器学习实践】Jupyter Notebook安装 侧边导航栏功能 操作及其他常用扩展功能介绍...
  10. MySql安装和基本管理