博弈论
Nim游戏
No.1
有N堆石子。A B两个人轮流拿,A先拿。每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜。给出N及每堆石子的数量,问最后谁能赢得比赛。
| a[1]^a[2]^...^a[N]==0?"B":"A";
|
Bash游戏
No.1
有一堆石子共有N个。A B两个人轮流拿,A先拿。每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜。给出N和K,问最后谁能赢得比赛。
| if(N%(K+1))cout<<"A"<<endl;
else cout<<"B"<<endl;
|
No.2
有一堆石子共有N个。A B两个人轮流拿,A先拿。每次只能拿1,3,4颗,拿到最后1颗石子的人获胜。给出N,问最后谁能赢得比赛。
| if(N%7==0||N%7==2)cout<<"B"<<endl;
else cout<<"A"<<endl;
|
No.3*
有一堆石子共有N个。A B两个人轮流拿,A先拿。每次拿的数量只能是2的正整数次幂,比如(1,2,4,8,16....),拿到最后1颗石子的人获胜。给出N,问最后谁能赢得比赛。
| if(N%3)cout<<"A"<<endl;
else cout<<"B"<<endl;
|
NO.4
有一堆石子共有N个。A B两个人轮流拿,A先拿。每次拿的数量最少1个,最多不超过对手上一次拿的数量的2倍(A第1次拿时要求不能全拿走)。拿到最后1颗石子的人获胜。给出N,问最后谁能赢得比赛。
| if(fibonacci(N))cout<<"B"<<endl;
else cout<<"A"<<endl;
|
威佐夫游戏
No.1
有2堆石子。A B两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。给出2堆石子的数量,问最后谁能赢得比赛。
| if((b-a)*(sqrt(5)+1)/2==a)cout<<"B"<<endl;
else cout<<"A"<<endl;//b>a
|