1218:取石子游戏

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 8837     通过数: 4144

【题目描述】

有两堆石子,两个人轮流去取。每次取的时候,只能从较多的那堆石子里取,并且取的数目必须是较少的那堆石子数目的整数倍,最后谁能够把一堆石子取空谁就算赢。

比如初始的时候两堆石子的数目是25和7。

25 7 --> 11 7 --> 4 7 --> 4 3 --> 1 3 --> 1 0
  选手1取   选手2取   选手1取   选手2取   选手1取

最后选手1(先取的)获胜,在取的过程中选手2都只有唯一的一种取法。

给定初始时石子的数目,如果两个人都采取最优策略,请问先手能否获胜。

【输入】

输入包含多数数据。每组数据一行,包含两个正整数a和b,表示初始时石子的数目。

输入以两个0表示结束。

【输出】

如果先手胜,输出"win",否则输出"lose"。

【输入样例】

34 12
15 24
0 0

【输出样例】

win
lose

【提示】

假设石子数目为(a,b)且a >= b,如果[a/b] >= 2则先手必胜,如果[a/b]<2,那么先手只有唯一的一种取法。[a/b]表示a除以b取整后的值。

【分析】

这道题应属简单的递归题目,放到深搜中,勉强。设 dfs(int a, int b, int step)函数是求a,b两堆石子,取step次分输赢,递归出口,1)a/b>=2;2)a%b=0,拿完了。递归式:dfs( b, a%b ,step+1)。

【参考代码】

#include <stdio.h>// a为最多石头的石头堆,b为较少石头的石头堆,step为当前的步数
void dfs(int a,int b,int step)
{if(a%b==0 || a/b>=2){ //满足条件:根据题意,当a/b>=2时必分输赢,//a%b==0表示拿完了一堆的石子,分出了输赢if(step%2==1)  //如果step是奇数则先手获胜printf("win\n");else  //否则先手失败printf("lose\n");return;}dfs(b,a%b,step+1);//这里将最多的石头堆保持在a堆,//a%b相当于a堆被拿掉b堆的整数倍个石子后剩余的数量,//将这个值给b堆,保持下一次a堆还是最大的
}int main()
{int n,m,t;while(scanf("%d%d",&n,&m) && n||m){if(n<m)  //将最多石头的石头堆放在n堆{t=n;n=m;m=t;}dfs(n,m,1);}return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1218

信息学奥赛一本通(1218:取石子游戏)相关推荐

  1. 信息学奥赛一本通 1218:取石子游戏 | OpenJudge NOI 2.5 6266:取石子游戏

    [题目链接] ybt 1218:取石子游戏 OpenJudge NOI 2.5 6266:取石子游戏 [题目考点] 1. 博弈:完全信息博弈 博弈树: 博弈树的结点对应于某一个棋局,其分支表示走一步棋 ...

  2. 信息学奥赛一本通网站1672:游戏通关

    如果你正在找这道题不超时(或者和自己的AC算法不一样)的算法,并且恰好像本蒟蒻一样会树状数组不会线段树,继续往下看 网址:信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn) 这道题的贪心 ...

  3. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  4. 信息学奥赛一本通超详细题解,动画图文题解

    内容来源于微信公众号:大神编程.已经过原文作者授权. 更新时间:2020-11-5 现在开始更新基础算法题. 个人感言:从未见过如此详细的题解,动画.图文结合,适合任何水平的选手.尤其是特别适合自学的 ...

  5. 1218:取石子游戏

    1218:取石子游戏时间限制: 1000 ms 内存限制: 65536 KB 提交数: 4462 通过数: 2049 [题目描述] 有两堆石子,两个人轮流去取.每次取的时候,只能从较多的那堆石子里取, ...

  6. 博弈论——1218:取石子游戏

    1218:取石子游戏时间限制: 1000 ms 内存限制: 65536 KB 提交数: 10430 通过数: 4939 [题目描述] 有两堆石子,两个人轮流去取.每次取的时候,只能从较多的那堆石子里取 ...

  7. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  8. 信息学奥赛一本通 提高篇 第六部分 数学基础 第1章 快速幂

    信息学奥赛一本通 提高篇 第六部分 数学基础 第1章 快速幂 https://blog.csdn.net/mrcrack/article/details/82846727 快速幂取模算法如何实现? h ...

  9. 信息学奥赛一本通(C++版)NOIP提高组(1820-1829)

    信息学奥赛一本通(C++版)NOIP提高组目录 //1820 [题目描述] 我们可以用这样的方式来表示一个十进制数:将每个阿拉伯数字乘以一个以该数字所 处位置的(值减1)为指数,以10为底数的幂之和的 ...

最新文章

  1. android 拖动的view,Android实现随意拖动View效果
  2. IOS开发笔记10-Object-C中的对象
  3. Navicat Premium 12连接Oracle时提示oracle library is not loaded的问题解决
  4. 【做题记录】区间排序—线段树
  5. 英语学习过程中的几点体会(1)
  6. [UE4]性能优化指南(程序向)
  7. python爬虫隐藏ip_Python3网络爬虫之使用User Agent和代理IP隐藏身份
  8. 将一个包含汉字的字符串逐个转化为数字,并得出该字符串的十进制和
  9. erp生产管理系统排名_仁和ERP软件企业管理系统如何提高生产管理
  10. Promise的deferred对象详解
  11. apache自定义虚拟主机日志格式
  12. anaconda查看删除增加镜像源
  13. linux是用于汇编语言,深入理解程序设计:使用Linux汇编语言
  14. vue v-model计算器案例
  15. 【排列组合】ZSC1076: 数学、不容易系列之三——考新郎
  16. 深入理解HashMap
  17. 【程序人生】回忆职业生涯(一)选择职业时的“图样图森破”
  18. C语言估算数学常量e,数学常数e
  19. 多目标优化常见分解方法
  20. HTML(二)在网页中插入表格

热门文章

  1. armadillo 库加入项目中程序卡死不运行的问题
  2. 怎样编写一个Photoshop滤镜(3)-- Scripting Plug-ins
  3. 阿里动物园新成员来了,10本书带你读懂这个新物种
  4. linux文件夹重命名busy,Linux下执行程序出现 Text file busy 提示时的解决方法
  5. rust如何进枪战服_rust手机版
  6. 从 Netflix 到 Spring Cloud Alibaba 差距不知一点点
  7. 天画-codeMaker组件化架构升级实践
  8. 右军:为张逸《解构领域驱动设计》推荐序
  9. JSF 网站汇总(转)
  10. 数据结构基础(5) --归并排序