题目描述
牛牛战队的三个队员在训练之余会自己口胡了一些题当做平时的益智游戏。有一天牛可乐想出了一个小游戏给另外两名队员玩,游戏规则如下:
初始一共有nn张卡牌 先手第一步最少要拿11张牌,最多要拿n-1n−1张牌。
接下来每一步,双方最少要拿11张牌,最多拿等同于上一步对方拿的牌数的牌。 拿走最后一张牌的人将取得游戏的胜利。
你作为旁观者,看着他们玩的很开心,想参与到这场游戏中来,赌一赌谁会能赢。
输入描述:
输入数据包含一个整数n(2≤n≤10^18),表示初始卡牌张数。
输出描述:
如果先手有必胜策略,输出Bob,否则输出Alice。
示例1
输入
2输出
Alice
说明
先手必须拿走一张牌,然后后手拿走了另一张牌,游戏结束。
关于找规律的题,可以多列举一些,观察规律。当张数是2^n 的时候输出Alice,否则输出Bob。
用n&(n-1)来判断n是不是2的次方幂,原理详见:n&(n-1)用法
AC代码:
#include <bits/stdc++.h>
int main()
{
long long n;
scanf("%lld",&n);
if((n&(n-1))==0)
printf("Alice\n");
else
printf("Bob\n");
return 0;
}