小牛vs小客(博弈問題)
阿新 • • 發佈:2018-11-14
連結: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; }