zoukankan      html  css  js  c++  java
  • T1218:取石子游戏

    【题目描述】

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

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

    最后选手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取整后的值。

    解题思路

      辗转相除;

    代码如下

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4     int a, b, c, flag;
     5     while(cin >> a >> b){
     6         if(!a && !b)    break;
     7         flag = 1;
     8         if(b > a){
     9             swap(a, b);
    10         }
    11         while(a / b == 1){
    12             c = a;
    13             a = b;
    14             b = c % a;
    15             flag = -flag;
    16         }
    17         if(flag == 1)    cout << "win" << endl;
    18         else    cout << "lose" << endl;
    19     }
    20     return 0;
    21 }
    取石子游戏
  • 相关阅读:
    python 学习分享-进程
    python 学习分享-实战篇类 Fabric 主机管理程序开发
    python 学习分享-线程
    python 学习分享-paramiko模块
    linux ubuntu开启sshd
    python 学习分享-实战篇高级的ftp
    python 学习分享-socketserver
    python 学习分享-socket编程
    Java学习笔记--Java开发坏境搭建
    C# 泛型
  • 原文地址:https://www.cnblogs.com/zoom1109/p/11200435.html
Copyright © 2011-2022 走看看