6266  取石子游戏

描述

有两堆石子,两个人轮流去取.每次取的时候,只能从较多的那堆石子里取,并且取的数目必须是较少的那堆石子数目的整数倍.最后谁能够把一堆石子取空谁就算赢. 
比如初始的时候两堆石子的数目是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取整后的值.
———————————分割线—————————————
递归求解
 #include "iostream"
#include "cstdio" using namespace std ; inline void gswap ( int &x , int &y ) { int temp = x ; x = y ; y = temp ; } void DFS ( int n , int m , const int Turn ) {
if ( n < m ) gswap ( n , m ) ;
if ( ! ( n % m ) || n / m >= ) {
if ( Turn == ) cout << "win" << endl ;
else cout << "lose" << endl ;
return ;
} if ( Turn == ) DFS ( n % m , m , ) ;
else if ( Turn == ) DFS ( n % m , m , ) ;
} int main ( ) {
int N , M ;
while ( scanf ( "%d %d" , &N , &M ) == && N && M ) {
DFS ( N , M , ) ;
}
return ;
}

2016-10-20 11:01:14

(完)

最新文章

  1. iOS-Xcode使用技巧
  2. 4、jvm内存回收&mdash;&mdash;器
  3. Python % 格式化字符串
  4. step by step 之餐饮管理系统二
  5. ThinkPHP中的动态缓存(S方法)和快速缓存(F方法)(转)
  6. java-mina(nio 框架)
  7. C语言数据结构----栈的应用(程序的符号匹配检测)
  8. for语句的嵌套(示例及练习)
  9. 基于visual Studio2013解决C语言竞赛题之1052求根
  10. JavaScript 属性操作
  11. Java 集合 LinkedList的ListIterator
  12. Linux:crontab的安装以及使用方法
  13. css3快速复习
  14. Springboot的static和templates区别
  15. C++设计模式——组合模式
  16. day34-python操作redis三
  17. Looper loop
  18. 结尾非零数的奇偶性(问题来源于PythonTip)
  19. JMeter学习(十三)目录介绍(转载)
  20. Android-SPUtil-工具类

热门文章

  1. boost之lexical_cast
  2. kindeditor在光标处插入编辑器外的数据
  3. 理解Kalman滤波的使用
  4. JS高级群的日常!写一个从10到0的倒计时,用console.log打印,不可以用 setInterval!本来说好的研究avalonJS最后演变成了看着大神在那边互相比拼实力。。
  5. ecshop编辑器FCKeditor修改成KindEditor编辑批量上传图片
  6. 分布式中Redis实现Session终结篇
  7. 分享一个Visual Studio的背景插件,让堆码更富情趣
  8. win7使用自带资源管理器来登陆FTP
  9. Burpsuite+sqlmap批量扫描sql漏洞
  10. Html 两个DIV并排的问题