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开始 题意:给一个正整数n(1<n<4294967295),p=1,S和O游戏,两人轮流对p乘以2−9之间的一个数,首先使p>=n的人获胜,每次游戏都从S开始
分
析
:
与
其
说
博
弈
,
不
如
说
是
规
律
。
分析:与其说博弈,不如说是规律。
分析:与其说博弈,不如说是规律。
这
个
题
看
着
有
点
像
N
i
m
博
弈
,
想
着
和
9
的
倍
数
?
还
是
别
的
?
这个题看着有点像Nim博弈,想着和9的倍数? 还是别的?
这个题看着有点像Nim博弈,想着和9的倍数?还是别的?
写
了
一
个
,
发
现
不
对
写了一个,发现不对
写了一个,发现不对
然
后
根
据
题
意
列
几
个
出
来
然后根据题意列几个出来
然后根据题意列几个出来
S
胜
:
2
−
9
(
0
+
2
)
—
—
9
S胜:2-9 (0+2)——9
S胜:2−9(0+2)——9
O
胜
:
10
−
18
(
9
+
1
)
—
—
9
∗
2
O胜:10-18 (9+1)——9*2
O胜:10−18(9+1)——9∗2
S
胜
:
19
−
162
(
2
∗
9
+
1
)
—
—
9
∗
2
∗
9
S胜:19-162 (2*9+1)——9*2*9
S胜:19−162(2∗9+1)——9∗2∗9
O
胜
:
163
−
324
(
9
∗
2
∗
9
+
1
)
—
—
9
∗
2
∗
9
∗
2
O胜:163-324 (9*2*9+1)——9*2*9*2
O胜:163−324(9∗2∗9+1)——9∗2∗9∗2
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
S胜:324−2916(9∗2∗9∗2+1)——9∗2∗9∗2∗9
如
果
我
方
首
先
给
出
了
一
个
在
N
不
断
除
1
8
后
的
得
到
不
足
1
8
的
数
M
,
如果我方首先给出了一个在N不断除18后的得到不足18的数M,
如果我方首先给出了一个在N不断除18后的得到不足18的数M,
我
方
就
可
以
取
得
胜
利
,
然
而
双
方
都
很
聪
明
,
所
以
这
样
胜
负
就
决
定
于
N
,
我方就可以取得胜利,然而双方都很聪明,所以这样胜负就决定于N,
我方就可以取得胜利,然而双方都很聪明,所以这样胜负就决定于N,
如
果
N
不
断
除
1
8
后
的
得
到
不
足
1
8
的
数
M
,
如果N不断除18后的得到不足18的数M,
如果N不断除18后的得到不足18的数M,
如
果
1
<
M
<
=
9
则
先
手
胜
利
,
如果1<M<=9则先手胜利,
如果1<M<=9则先手胜利,
如
果
9
<
M
<
=
1
8
则
后
手
胜
利
。
如果9<M<=18 则后手胜利。
如果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;
}
这篇博客探讨了一种名为“S和O游戏”的两人博弈问题,玩家轮流将数字p乘以2到9之间的数,目标是首先达到或超过给定的正整数n。博主通过观察和分析发现,游戏的胜负并不完全取决于博弈论,而是存在一定的数字规律。当n除以18的余数在1到9之间时,先手(S)获胜;当余数在10到18之间时,后手(O)获胜。解决方案是通过判断n除以18的余数来确定先手或后手的胜负。
4万+

被折叠的 条评论
为什么被折叠?



