题目描述
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;
}