2025年轮流取石头游戏

轮流取石头游戏Problem Description 两个足够聪明的人玩轮流取石头的游戏 谁取到最后一个石头谁就赢了 他们一次只能取 1 个 3 个 7 个或 8 个石头 写一程序判断 n 个石头时先取的人是输还是赢 输入格式 一个整数 n 其值不超过 输出格式 如果先取的人赢 请以单独一行输出 1

大家好,我是讯享网,很高兴认识大家。
  • Problem Description

两个足够聪明的人玩轮流取石头的游戏,谁取到最后一个石头谁就赢了,他们一次只能取1个、3个、7个或8个石头,写一程序判断n个石头时先取的人是输还是赢。

输入格式:
一个整数n,其值不超过。
输出格式:
如果先取的人赢,请以单独一行输出1,否则输出0。

1 10 300 

讯享网
讯享网1 1 0 
  • 问题解读

首先这两个人都足够聪明。假使第一个人先取,他会想尽办法赢。但第二个人也不是吃素的,他会不遗余力的阻击第一个人赢。由于石头数不确定,我们不妨先用较小数目的石头试试水,看看能否找到规律。

  • 枚举分析

我们假设 P 1 P_1 P1 P 2 P_2 P2分别代表第一个人和第二个人,且第一个人先取,现在来枚举几种情况,看看第一个人什么情况下去会赢。

一个石头:

在这里插入图片描述
讯享网

注:第一个人赢。

两个石头:

在这里插入图片描述

注:第一个人输。

三个石头:

第一种情况:

在这里插入图片描述

注:第一个人赢。

第二种情况:

在这里插入图片描述

注:第一个人赢。

四个石头:

第一种情况:

在这里插入图片描述

注:第一个人赢。

第二种情况:

在这里插入图片描述

注:第一个人赢。

五个石头:

第一种情况:

在这里插入图片描述

注:第一个人赢。

第二种情况:

在这里插入图片描述

注:第一个人赢。

第三种情况:

在这里插入图片描述

注:第一个人赢。

继续枚举,发现当石头数为:2 4 6 15 17 19 30 32 34 36 45 47 49 51……时,第二个人赢。观察这些数据可以发现:当n%15==0或2或4或6时,第二个人赢,其余情况第一个人赢。这样,我们就找到了规律。

  • 代码实现

#include<iostream> using namespace std; int main() { 
    int n; while(cin>>n) { 
    if(n%15==0) cout<<0; else if(n%15==2) cout<<0; else if(n%15==4) cout<<0; else if(n%15==6) cout<<0; else cout<<1; } return 0; } 
  • 运行结果

在这里插入图片描述

小讯
上一篇 2025-01-13 15:05
下一篇 2025-01-16 19:43

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/40453.html