当前位置: 代码迷 >> 综合 >> POJ - 2505 A multiplication game(博弈)
  详细解决方案

POJ - 2505 A multiplication game(博弈)

热度:82   发布时间:2023-11-25 08:05:46.0

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=1SOp2?9使p>=nS

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

S 胜 : 2 ? 9 ( 0 + 2 ) — — 9 S胜:2-9 (0+2)——9 S2?90+29
O 胜 : 10 ? 18 ( 9 + 1 ) — — 9 ? 2 O胜:10-18 (9+1)——9*2 O10?189+19?2
S 胜 : 19 ? 162 ( 2 ? 9 + 1 ) — — 9 ? 2 ? 9 S胜:19-162 (2*9+1)——9*2*9 S19?1622?9+19?2?9
O 胜 : 163 ? 324 ( 9 ? 2 ? 9 + 1 ) — — 9 ? 2 ? 9 ? 2 O胜:163-324 (9*2*9+1)——9*2*9*2 O163?3249?2?9+19?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 S324?29169?2?9?2+19?2?9?2?9

如 果 我 方 首 先 给 出 了 一 个 在 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;
}
  相关解决方案