1. 程式人生 > >小牛vs小客(博弈問題)

小牛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;
 }