巴什博奕

来源:互联网 发布:dnfdll源码 编辑:程序博客网 时间:2024/04/28 06:39



实例:



分析:1张牌,先抓胜。

           2张牌,先抓胜。

           3张牌,后抓胜。

           4张牌,先抓胜。

           5张牌,分析:先抓的人第一次不能让自己胜,那尽量使剩下的牌数 得到的结果一定是后抓胜,如果不能,则说明结果是后抓胜。剩下3张牌的结果是后抓胜,所以先抓的人先抓2张,这样自己一定保证胜。

           5张牌,先抓胜。

           6张牌,分析能否抓一次使得剩下的牌数一定是后抓胜,没有,故后抓胜。

           7张牌,先抓胜

           ……

              n张牌,遍历2的0,1,2,3~k次方,(2的k次方<=n),判断(n-2的 i 次方)能否得到后抓胜,能则说明先抓胜,否则后抓胜


#include <iostream>#include <cmath>using namespace std;int main(){    int A[1001],n,i,j;    A[1]=A[2]=0;    A[3]=1;    A[4]=0;    for(i=5;i<=1000;i++)    {        for(j=0;pow(2,j)<=i;j++)        {            if(A[i-int(pow(2,j))]==1||pow(2,j)==i) {A[i]=0;break;}        }        if(pow(2,j)>i) A[i]=1;    }    while(cin>>n)    {        if(A[n]==1) cout<<"Cici"<<endl;        else cout<<"Kiki"<<endl;    }    return 0;}



0 0