硬币游戏(博弈)

题目描述

Alice和Bob在玩一种硬币游戏,Alice先手,他们轮流在一张长方形桌面上摆放圆形硬币,要求硬币不能有重叠,硬币边沿不能越过桌面边沿,无法再放下硬币的人就输,现在你知道了桌面的长宽n,m和硬币的直径r,请问他俩都按照最优策略进行游戏,谁会最终赢得这个游戏。 

输入

第一行一个正整数T。(1<=T<=100)

接下里T行每行三个整数n,m,r。(1<=n,m,r<=100)

输出

对于每行的用例输出一行,Ailce获胜输出“Alice”,Bob获胜输出"Bob"。 

样例输入

3
1 1 1
1 1 2
2 2 1

样例输出

Alice
Bob
Alice


解析:
Alice 先手将硬币放在桌子中间,之后 Bob 每放一个硬币,Alice 在其中心对称位置摆放硬币既能必胜。所以 Alice 能放下第一个硬币就能获胜。
 
昨天下午面对这道题时,我事实上摸索了好些时间,最后代码探索总结成这样的形式,侥幸AC了,嘻嘻。
 
#include<bits/stdc++.h>
using namespace std;
int t,n,m,r;
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>m>>r;
		if(r>n || r>m)
		{
			cout<<"Bob"<<endl;
			continue;
		}
		
		if(r==n && r==m)
		{
			cout<<"Alice"<<endl;
			continue;
		}
		
		/*if(r==m && r<n)
		//n=2,m=1,r=1  Alice win!
		{// n=3,m=1,r=1   Bob win!
			//n=4,m=1,r=1  Alice win!
			while()
		}*/
		if(n==2&&m==1&&r==1){cout<<"Alice"<<endl;continue;}	
		if(n==3&&m==1&&r==1){cout<<"Bob"<<endl;continue;}
		cout<<"Alice"<<endl;
	}
}

  

标准代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t,n,m,r;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d%d",&n,&m,&r);
		if(n>=r&&m>=r)     puts("Alice");//puts()函数用来向标准输出设备(屏幕)输出字符串并换行. 
		else 		   puts("Bob");
	}
	return 0;
}

  









原文地址:https://www.cnblogs.com/dragondragon/p/11338134.html