现在的位置: 首页 > 综合 > 正文

UVa Problem 847 A Multiplication Game (乘法游戏)

2012年12月26日 ⁄ 综合 ⁄ 共 777字 ⁄ 字号 评论关闭
// A Multiplication Game (乘法游戏)
// PC/UVa IDs: 110505/847, Popularity: A, Success rate: high Level: 3
// Verdict: Accepted
// Submission Date: 2011-05-29
// UVa Run Time: 0.012s
//
// 版权所有(C)2011,邱秋。metaphysis # yeah dot net
//
// 假设最终数为 162,为了防止对方得到大于等于 162的数,则上一步,一方应该让数尽量不大于 162 / 
// 9 = 18,如果大于等于 18,则对方可以乘以 9 即可大于等于 162,再往上一步,一方应该尽量选择将数
// 相乘后得到大于等于 9 的数,因为这样,另一方无论选择那个乘数,终将导致乘积大于等于 18,因为 9 /
// 9 = 1,即谁先乘,谁将获胜。
// 对于给定的数N,对于 Stan 来说,先达到数 N,则是胜利,回归到上一步,如果 Stan 先达到 N / 9,
// 则失败,继续上一步,若 Stan 先达到 N / 9 / 2,则胜利,使用递归解决即可。
	
#include <iostream>
#include <cmath>
	
using namespace std;
	
void ones(int number, bool win)
{
	if (number <= 9 && win)
	{
		cout << "Stan wins." << endl;
		return;
	}
	if (number <= 2 && !win)
	{
		cout << "Ollie wins." << endl;
		return;
	}
	
	if (win)
		ones(ceil(number / 9.0), !win);
	else
		ones(ceil(number / 2.0), !win);
}
	
int main(int ac, char *av[])
{
	int number;
	
	while (cin >> number)
		ones(number, true);
	
	return 0;
}
【上篇】
【下篇】

抱歉!评论已关闭.