小牛vs小客(博弈问题)

链接:https://ac.nowcoder.com/acm/contest/75/D
来源:牛客网
 

题目描述

小牛和小客玩石子游戏,他们用n个石子围成一圈,小牛和小客分别从其中取石子,谁先取完谁胜,每次可以从一圈中取一个或者相邻两个,每次都是小牛先取,请输出胜利者的名字(小牛获胜输出XiaoNiu,小客获胜输出XiaoKe)(1 2 3 4 取走 2 13 不算相邻)

输入描述:

输入包括多组测试数据
每组测试数据一个n(1≤n≤1e9)

输出描述:

每组用一行输出胜利者的名字(小牛获胜输出XiaoNiu,小客获胜输出XiaoKe)

示例1

输入

复制

2
3

输出

复制

XiaoNiu
XiaoKe

思路

这是一道简单的博弈问题,小牛和小客两个人拿石头,当石头小于两颗(当然必须要有石头),先手一次就可以拿完,后手在没有表现机会的情况下就输掉了比赛;当有三颗石头时,无论先手是拿一颗还是两颗,后手都能一次拿完;当有四颗时,无论先手拿几颗,后手只需要在拿的时候讲石头分为两堆就可以了。石头再多也逃不过四颗的情况。所以结论,当石头小于两颗时,先手获胜,else,后手赢。

代码

#include<iostream>
#include<stdio.h>
using namespace std;
int main() 
{
	int n;
	while(cin>>n)
	{
		if(n>2)cout<<"XiaoKe"<<endl;
		else cout<<"XiaoNiu"<<endl;
	}
	return 0;
 } 

猜你喜欢

转载自blog.csdn.net/qq_41705596/article/details/83962217