zoukankan      html  css  js  c++  java
  • 斐波那契博弈

    题目描述  来源:牛客网

        幼儿园开学了,为了让小盆友们能尽可能的多的享受假期。校长大人决定让小盆友分批到校,至于每批学生来多少人由一个小傻子和一个小仙女负责,两个人轮番负责,校长会在最后的时候去查看工作进度,小傻子不想被别人嘲笑自己傻,小仙女要证明自己比小傻子聪明。所以她们回去争抢安排最后一名小盆友。每次安排的小盆友至少为1,至多为上一次安排的2倍。小仙女抢到了先手的机会。第一次安排小盆友不能直接安排所有的小盆友一起回校。

    输入描述:

    单组测试数据
    输入一个整数n——n代表小盆的个数(n>=2&&n<=1e9)

    输出描述:

    输出获胜人的名字——“Xian”或者“Sha”
    示例1

    输入

    3

    输出

    Sha

    说明

    (Fisrt)1 -> (Second)  2         ||     2 - > 1  无论小仙女先送一个还是两个都会被小傻子获胜
    示例2

    输入

    4

    输出

    Xian

    说明

    1 -> 2 -> 1    ||    1 -> 1 -> 2        小仙女先送一个,小傻子无论送一个或者两个都会被小仙女取胜。



    思路:
    刚开始列出了1到8的情况,想通过找规律加分析,找出公式,却没想到这题的规律这么复杂
    总结:
    这种题目靠积累,做过的人三分钟解决,没做过的人三年也想不出来啊
    如果n属于斐波那契数列,那么后手胜利。
    #include <iostream>  
    #include <string.h>  
    #include <stdio.h>  
      
    using namespace std;  
    const int N = 55;  
      
    int f[N];  
      
    void Init()  
    {  
        f[0] = f[1] = 1;  
        for(int i=2;i<N;i++)  
            f[i] = f[i-1] + f[i-2];  
    }  
      
    int main()  
    {  
        Init();  
        int n;  
        while(cin>>n)  
        {  
            if(n == 0) break;  
            bool flag = 0;  
            for(int i=0;i<N;i++)  
            {  
                if(f[i] == n)  
                {  
                    flag = 1;  
                    break;  
                }  
            }  
            if(flag) puts("Sha");  
            else     puts("Xian");  
        }  
        return 0;  
    }  
  • 相关阅读:
    Centos给php安装cassandra扩展
    树莓派配置文档 config.txt 说明(转)
    ubuntu远程桌面连接windows系统(转)
    Shell学习笔记
    linux终端terminal个性化配置(转)
    ubuntu14.04安装bodhi桌面系统后,unity启动界面改变,如何还原
    man curl_easy_perform(原创)
    man curl_easy_setopt(原创)
    树莓派 config.txt
    使用dd命令克隆整个系统(转)
  • 原文地址:https://www.cnblogs.com/carcar/p/8482249.html
Copyright © 2011-2022 走看看