问题描述:

N块石头排成一行,每块石头有各自固定的位置。

两个玩家依次取石头,每个玩家可以取其中任意一块石头,或者相邻的两块石头,石头在游戏过程中不移位。

最后能将石头一次取光的玩家获胜。

C语言实现:

此处简化,将石头数设置为5,用一个长度为5的数组表示石头,当元素值为1的时候,代表有石头。为0时,代表没有石头。

#include<stdio.h>
//判断当前条件下是否胜利
int ifWin(int array[])
{int sum=0;for(int i=0;i<5;i++)sum+=array[i];if(sum==0)return 1;else return 0;
}
//取石头操作
void getStone(int array[])
{//要取的石头数(1个或2个)int num_get;int position=-1;int position_2=-1;printf("how many stones you want get (1 or 2):");scanf("%d",&num_get);printf("\n");if(num_get==1){printf("the position(1~5):");scanf("%d",&position);printf("\n");if(array[position-1]==1)//将当前位置的数组元素置为0,表示已经取走石头array[position-1]=0;elseprintf("please obey the rules!\n");}else if(num_get==2){printf("the positions(1~5) must touched:");scanf("%d,%d",&position,&position_2);printf("\n");if((array[position-1]==1)&&(array[position_2-1]==1)){array[position-1]=0;array[position_2-1]=0;}else{printf("please obey the rules!\n");}}else{printf("please obey the rules!\n");}
}
//打印当前游戏状况
void gameSituation(int array[])
{for(int i=0;i<5;i++)printf("%d ",array[i]);printf("\n");
}int main()
{int a[5]={1,1,1,1,1};int flag=-1;while(1){flag=ifWin(a);if(flag==1)break;gameSituation(a);getStone(a);}printf("You win!\n");return 0;
}

这个游戏先取者有必胜方法:

先取者只需要取中间的石头即可。

当石头为奇数时,取最中间的那颗石头。

当石头为偶数时,取最中间的两颗石头。

一排石头的游戏(取石头)C语言实现相关推荐

  1. 算法作业2-轮流取石头游戏

    两个足够聪明的人玩轮流取石头的游戏,谁取到最后一个石头谁就赢了,他们一次只能取1个.3个.7个或8个石头,写一程序判断n个石头时先取的人是输还是赢. 输入格式: 一个整数n,其值不超过10000000 ...

  2. Java黑皮书课后题第5章:**5.34(游戏:石头、剪刀、布)编程练习题3.17给出玩石头-剪刀-布游戏的程序。修改这个程序,让用户可以连续玩这个游戏,直到用户或者计算机赢对手两次以上为止

    5.34(游戏:石头.剪刀.布)编程练习题3.17给出玩石头-剪刀-布游戏的程序.修改这个程序,让用户可以连续玩这个游戏,直到用户或者计算机赢对手两次以上为止 题目 题目概述 编程练习题3.17 破题 ...

  3. Java黑皮书课后题第3章:*3.17(游戏:剪刀、石头、布)编写可以玩流行的剪刀-石头-布游戏的程序

    *3.17(游戏:剪刀.石头.布)编写可以玩流行的剪刀-石头-布游戏的程序 题目 题目概述 运行示例 ***特别注意*** 破题 代码 题目 题目概述 *3.17(游戏:剪刀.石头.布)编写可以玩流行 ...

  4. nim2 取石头youxi

    a先把石头分堆,然后bababa的顺序取石头,只能取其中一堆中的若干颗(不能不取) 这种问题先考虑 先取者的胜态问题 (1,1)先取者必败, 所以(1,x),当x>1时可以转换为(1,1)使后取 ...

  5. 使用Java完成石头迷阵游戏

    石头迷阵游戏 在一张4X4的地图上,有15个数字方块以及1个空白块. 每局的排序都是随机生成,不重复,如图1所示. 使用键盘的上下左右按键控制空白方块的移动. 记录操作步数. 可以重新开始. 作弊码: ...

  6. 游戏五子棋(c语言)

    游戏五子棋(c语言) 一.项目背景 二.设计目的 三.项目功能需求 1.欢迎界面 2.下棋操作 3.重玩功能 4.悔棋功能 5.胜负判断 四.系统的功能结构图 五.功能模块介绍 1.用户界面模块 2. ...

  7. c语言 2d游戏设计教程,C语言编写简单2D游戏

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 为了实现鼠标控制飞机飞行,当鼠标一移动,获取鼠标X的坐标,在消息处理函数中加入下列代码: x = LOWORD(lParam); 如果鼠标的X坐标大于窗口 ...

  8. 基于游戏开发的C语言大作业视频集锦

    基于游戏开发的C语言大作业视频集锦 从2014年至今,尝试了基于游戏开发的C语言程序设计教学,每次课程均会布置大作业,以下视频为一些学生做的大作业视频集锦. 基于游戏开发的C语言大作业视频集锦 后续, ...

  9. 计算机c语言运算符号取整,c语言取整(c语言四舍五入取整)

    C语言有以下几种取整方法:1. 直接赋值给整数变量.如:int i = 2.5: 或 i = (int) 2.5: 这种方法采用的是舍去小数部分2. 使用floor函数.floor(x)返回的是小于或 ...

最新文章

  1. cad打印样式ctb丢失_我的第一次打印:cad模型空间套图框打印图纸
  2. 修改Windows的cmd和PowerShell 的字体
  3. Mozilla发布2015年度报告:搜索合作成营收大头
  4. javascript权威指南--学习笔记
  5. rabbitmq 持久化_RabbitMQ原理与相关操作(三)消息持久化
  6. 石锤!今年Python要过苦日子了? 程序员:我疯了!
  7. python nonetype报错_python 查询数据库数据 NoneType报错
  8. php连接mysql开发环境_PHP开发环境搭建及常用的数据库操作
  9. @Transactional +自定义注解不生效_SpringBoot之路(三)SpringDataJpa中常用注解的使用...
  10. 异步复位同步释放机制-系统完美稳定
  11. java开发就业困难吗_就业困难期,他们面临着幸福的烦恼
  12. ASP.NET MVC 3和Razor中的@helper 语法
  13. 海康NVR录像机集成大华摄像头
  14. 5e服务器显示steam名字,5e为什么不显示我csgo的名字(5ecsgo)
  15. java 编写序列_java如何编写类似oracle自增序列的算法?
  16. 空时编码的理论与实践(3)空时编码设计准则
  17. 华硕鹰眼ZenFone Zoom推动潮流:比肩专业相机几率几何?
  18. 四、Spyder 下使用 Scrapy 开发爬虫之腾讯视频抓取
  19. 694.27公斤何登骥360搜索热头条 北方旱作国稻种芯功能水稻
  20. excel数据库_标签打印软件中Excel数据整理及导入

热门文章

  1. 阿里巴巴 风控部门实习
  2. 同花顺核下单python_同花顺核新委托下单详解
  3. android apk 修改 签名文件位置,更改APK中图标文件,签名后重新安装
  4. 程序员也可以的浪漫-星空特效
  5. 关于被通过游侠平台局域网攻击的求助帖
  6. 各大IT公司的起名缘由
  7. 每周读书#1 - 《文心》
  8. 一个企业的管理水平高与低,到底怎么衡量?
  9. 图形学: 利用VC模拟行星公转自转-动画效果
  10. js导出excel(带边框以及文本样式)