当前位置:编程学习 > C/C++ >>

hdoj2149

巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。
  显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。
[cpp] 
#include<iostream> 
#include<fstream> 
using namespace std; 
int main() 

    //ifstream cin("acmilan.txt"); 
    int a,b; 
    while(cin>>a>>b) 
    { 
        if(b>=a) 
        { 
            for(int i=a;i<=b;i++) 
            { 
                if(i!=b) 
                    cout<<i<<" "; 
                else 
                    cout<<i<<endl; 
            } 
        } 
        else 
        { 
            if(a%(b+1)==0) 
                cout<<"none"<<endl; 
            else 
            { 
                cout<<a%(b+1)<<endl; 
            } 
 
        } 
 
    } 
    //system("pause"); 
    return 0; 

 作者:teibin

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,