链接:
     
      https://ac.nowcoder.com/acm/contest/949/A
     
     
     来源:牛客网
      时间限制:C/C++ 1秒,其他语言2秒
      
空间限制:C/C++ 262144K,其他语言524288K
      
64bit IO Format: %lld
      
     
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
     题目描述
    
小石和小阳玩游戏,一共有 nn 个数,分别为 1∼n1∼n 。两人轮流取数,小石先手。对于每轮取数,都必须选择剩下数中的任意一个数 xx,
同时还要取走 x,⌊x/2⌋,⌊⌊x/2⌋/2⌋… 如果某个数不存在,就停止取数(不能一个数都不取)。谁取走最后一个数,谁就输了. 小
石想知道自己能否获胜。 如果小石能赢,输出 “Shi”,否则输出 "Yang”(均不输出引号)。
      输入描述:
     
共一行,输入一个数 nn 。
      输出描述:
     
共一行,输出 "Shi" 或 "Yang"(不输出引号)。
       示例1
      
         输入
        
1
         输出
        
Yang
         说明
        
小石只能取走 11,小阳赢。
       示例2
      
         输入
        
2
         输出
        
Shi
         说明
        
若小石取走 11,则小阳只能取走 22,小石赢。
      备注:
     
1≤n≤1e9
思路:博弈论问题,因为是小石先手,所以1绝对会被小石拿走并且会是在第一轮被拿走,假设n > 1,并且小石输,那么对于所有小石会输的情况第一轮小石
如果拿1就相当于变成了小阳先手,小阳就会输,所以除了n = 1之外小阳必输,小石必赢
代码:
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 int n; 6 7 int main() 8 { 9 cin >> n; 10 if(n == 1) cout << "Yang"; 11 else cout << "Shi"; 12 return 0; 13 }
 
转载于:https://www.cnblogs.com/chuyds/p/11209453.html
 
