Problem Description
The famous "Alice and Bob" are playing a game again. So now comes the new problem which need a person smart as you to decide the winner. The problem is as follows: They are playing on a rectangle paper, Alice and Bob take turn alternatively, for each turn, a people cut the rectangle vertically or horizontally, the result two rectangle after cut must be IDENTICAL, also the side must be integer, after the cut, one rectangle will be descarded. The first people fail to cut lose the game. Of course, Alice makes first as usual.
Input
First Line contains an integer t indicate there are t cases(1≤t≤1000) For each case: The input consists of two integers w and h(1≤w,h≤1,000,000,000), the size of rectangle.
Output
First output Case number For each case output Alice or Bob, indicate the winner.
Sample Input
2 1 2 2 2
Sample Output
Case 1: Alice Case 2: Bob
#include <iostream>
#include <cstdio>
using namespace std;
int j;
void compete(int w,int h)//递归
{
if(w%2==0) //这里还可以写成 (!w&1)
{
w/=2;
j++;
compete(w,h);
}
else if(h%2==0)
{
h/=2;
j++;
compete(w,h);
}
}
int main()
{
int t,i;
int w,h;
scanf("%d",&t);
for(i=1;i<=t;i++)
{
j=0;
scanf("%d%d",&w,&h);
compete(w,h);
printf("Case %d: ",i);
if(j%2==0)
printf("Bob\n");
else
printf("Alice\n");
}
return 0;
}

本文详细解析了一道关于游戏博弈的问题,并通过递归算法实现了代码解决过程。通过对给定矩形纸张进行垂直或水平切割,判断谁会先无法继续切割而输掉游戏。提供了一个简单的思路和实现代码,帮助理解问题本质和算法应用。

被折叠的 条评论
为什么被折叠?



