作者:杨胤才_669 | 来源:互联网 | 2023-10-13 10:03
原题:
http://172.16.0.132/junior/#contest/show/1373/0
题目描述:
小勇和小实是对好朋友,他们经常一起游戏。
今天他们玩的游戏是这样的:有一个由正方形石头铺成的地板,它的高是2,长度是N。
例如一下是N=3的情况:
现在他们轮流在上面放上长宽分别是1和2的矩形石块,可以横放也可以竖放,但要刚好铺在地板上两个未被覆盖的正方形石头上,当某人不能放上去时他就输了。
例如,某个游戏可能是这样的,小实横放石块在左上面,如下:
然后小勇横放石块在右下面,如下:
这时小实不能再放石块了,所以他输了。小勇比较礼让,他让小实先放。当然,以上的方法可能不是最好的,现在假如他们都绝顶聪明,请你编程判断究竟谁会赢。
输入:
第一行一个整数C(1<&#61;C<&#61;100)&#xff0c;表示测试数据的个数。
接下来有C行&#xff0c;每行为一个测试数据&#xff0c;每个测试数据只有一个整数N(1<&#61;N<&#61;100)。
输出&#xff1a;
输出C行&#xff0c;每行输出相应测试数据的结果。对于每个结果&#xff0c;如果是小勇赢的话就输出xiaoyong&#xff0c;否则就是小实赢啦&#xff0c;输出xiaoshi。
样例输入&#xff1a;
1
1
样例输出&#xff1a;
xiaoshi
分析&#xff1a;
石子游戏的最优策略是这样的&#xff0c;假如先放&#xff0c;就竖放&#xff0c;否则就根据对方的方法来放&#xff0c;这时&#xff0c;如果对方横放&#xff0c;则在其正上方或正下方横放一石子&#xff0c;如如果对方竖放&#xff0c;也就竖放&#xff0c;按这个方法&#xff0c;很容易得到这个结论&#xff1a;当n为奇数时小实赢&#xff0c;否则小勇赢。
实现&#xff1a;
int c,n;
int main()
{freopen("game.in","r",stdin);freopen("game.out","w",stdout);scanf("%d",&c);while(c--){scanf("%d",&n);if(n%2&#61;&#61;1) printf("xiaoshi\n");else printf("xiaoyong\n");}
}