Description:
John和他的哥哥一起玩一個遊戲,有N種顏色不一樣的球,編號爲1-N,每種球有a[i]個,其中a[i]對應第i個球的數量。
遊戲很簡單,首先給定初始的N種球的數量,由John開始遊戲,可以在任意一種顏色的球取出任意個,每一輪至少取一個球。
如果誰先把球取完,那麼誰就是輸家。另一人是贏家。
Input:
輸入數據第一行爲T,表示要測試數據的組數;0< T<= 50 第二行爲N,表示有幾種顏色的球;(0< N<= 50) 第三行爲N個數,表示每種顏色的球的個數a[i],(0< a[i]<= 5000)
Output:
對應每組數據輸出最後的贏家,如果John贏則輸出John,否則輸出Brother
Sample Input:
Sample Output:
先手必勝當且僅當: (1)所有堆的石子數都爲1且遊戲的SG值爲0; (2)有些堆的石子數大於1且遊戲的SG值不爲0
#include "stdio.h"
#include "string.h"
int a[1001];
int sg[1111];
void getsg()//打表程序
{
int i,j,k;
memset(sg,0,sizeof(sg));
for(i=1;i<=100;i++)
{
memset(a,0,sizeof(a));
for(j=0;j<=i;j++)
{
a[sg[i-j]]=1;
}
for(j=0;;j++)
{
if(a[j]==0)
{
sg[i]=j;
break;
}
}
}
}
int main()
{
int i;
// getsg();
// for(i=0;i<1000;i++)
// {
// printf("%d ",sg[i]);
// }
int kk,n,k,j,flag;
scanf("%d",&kk);
while (kk--)
{
int a,b=0;
flag=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a);
b=b^a;
if(a>1)
flag=1;
}
if(flag==0)
{
if(b==0)
printf("John\n");
else
printf("Brother\n");
}
else
{
if(b)
printf("John\n");
else
printf("Brother\n") ;
}
}
return 0;
}