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