HDU1517 A Multiplication Game(博弈论)

本文深入探讨了一款经典博弈问题的解决策略,通过数学逻辑分析,确定了游戏胜负的关键因素。文章提出了一种通过不断除以18并向上取整的方法来判断最终胜利者,即若结果位于1至9之间,则先手玩家获胜;反之,则后手玩家胜出。代码实现简洁明了,易于理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传送门

【题目分析】

经典博弈问题。

首先n的位置为必胜态,所以[\frac{n}{9}]-n均为必败态,[\frac{n}{18}]-[\frac{n}{9}]为必胜态。。。。。以此类推,所以只用一直除一个18(不过要向上取整),最后判断,如果在1~9之间则先手胜出,否则后手胜。

【代码~】

#include<bits/stdc++.h>
using namespace std;

long long n;

int main(){
	while(scanf("%lld",&n)!=EOF){
		while(n>18){
			n=ceil(1.0*n/18.0);
		}
		if(n<=9)
		  puts("Stan wins.");
		else
		  puts("Ollie wins.");
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值