POJ - 2505 A multiplication game(博弈)

这篇博客探讨了一种名为“S和O游戏”的两人博弈问题,玩家轮流将数字p乘以2到9之间的数,目标是首先达到或超过给定的正整数n。博主通过观察和分析发现,游戏的胜负并不完全取决于博弈论,而是存在一定的数字规律。当n除以18的余数在1到9之间时,先手(S)获胜;当余数在10到18之间时,后手(O)获胜。解决方案是通过判断n除以18的余数来确定先手或后手的胜负。

POJ - 2505 A multiplication game

题 意 : 给 一 个 正 整 数 n ( 1 < n < 4294967295 ) , p = 1 , S 和 O 游 戏 , 两 人 轮 流 对 p 乘 以 2 − 9 之 间 的 一 个 数 , 首 先 使 p > = n 的 人 获 胜 , 每 次 游 戏 都 从 S 开 始 题意:给一个正整数n(1 < n < 4294967295),p=1,S和O游戏,两人轮流对p乘以2-9之间的一个数,首先使p>=n的人获胜,每次游戏都从S开始 n1<n<4294967295p=1SOp29使p>=nS

分 析 : 与 其 说 博 弈 , 不 如 说 是 规 律 。 分析:与其说博弈,不如说是规律。
这 个 题 看 着 有 点 像 N i m 博 弈 , 想 着 和 9 的 倍 数 ? 还 是 别 的 ? 这个题看着有点像Nim博弈,想着和9的倍数? 还是别的? Nim9
写 了 一 个 , 发 现 不 对 写了一个,发现不对
然 后 根 据 题 意 列 几 个 出 来 然后根据题意列几个出来

S 胜 : 2 − 9 ( 0 + 2 ) — — 9 S胜:2-9 (0+2)——9 S290+29
O 胜 : 10 − 18 ( 9 + 1 ) — — 9 ∗ 2 O胜:10-18 (9+1)——9*2 O10189+192
S 胜 : 19 − 162 ( 2 ∗ 9 + 1 ) — — 9 ∗ 2 ∗ 9 S胜:19-162 (2*9+1)——9*2*9 S1916229+1929
O 胜 : 163 − 324 ( 9 ∗ 2 ∗ 9 + 1 ) — — 9 ∗ 2 ∗ 9 ∗ 2 O胜:163-324 (9*2*9+1)——9*2*9*2 O163324929+19292
S 胜 : 324 − 2916 ( 9 ∗ 2 ∗ 9 ∗ 2 + 1 ) — — 9 ∗ 2 ∗ 9 ∗ 2 ∗ 9 S胜:324-2916 (9*2*9*2+1)——9*2*9*2*9 S32429169292+192929

如 果 我 方 首 先 给 出 了 一 个 在 N 不 断 除 1 8 后 的 得 到 不 足 1 8 的 数 M , 如果我方首先给出了一个在N不断除18后的得到不足18的数M, ,
我 方 就 可 以 取 得 胜 利 , 然 而 双 方 都 很 聪 明 , 所 以 这 样 胜 负 就 决 定 于 N , 我方就可以取得胜利,然而双方都很聪明,所以这样胜负就决定于N, ,
如 果 N 不 断 除 1 8 后 的 得 到 不 足 1 8 的 数 M , 如果N不断除18后的得到不足18的数M,
如 果 1 < M < = 9 则 先 手 胜 利 , 如果1<M<=9则先手胜利,
如 果 9 < M < = 1 8 则 后 手 胜 利 。 如果9<M<=18 则后手胜利。

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    double n;
    while(scanf("%lf",&n)!=EOF)
    {
    	while(n>18) n/=18;
        if(n<=9) puts("Stan wins.");
        else puts("Ollie wins.");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wa_Automata

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值