程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 2177 取(2堆)石子游戲 (威佐夫博奕)

hdu 2177 取(2堆)石子游戲 (威佐夫博奕)

編輯:C++入門知識

hdu 2177 取(2堆)石子游戲 (威佐夫博奕)


//,在威佐夫博奕的基礎上新增加了一條要求:就是如果在贏得條件下,輸出第一步怎麼走。
# include 
# include 
# include 
# include 
# include 
using namespace std;
int main()
{
    int a,b,i,k;
    while(~scanf("%d%d",&a,&b),a+b)
    {
        k=b-a;
        k=k*(sqrt(5.0)+1)/2;
        if(k==a)
            printf("0\n");
        else
        {
            printf("1\n");
            for(i=1; i<=a; i++) //取兩堆
            {
                int n=a-i;
                int m=b-i;
                k=m-n;
                k=k*(sqrt(5.0)+1)/2;
                if(k==n)//後手贏 相當與第一次的先手贏
                    printf("%d %d\n",n,m);
            }
            for(i=0; i<=b-1; i++) //只取一堆,取大堆 能得出全部情況
            {
                int n=i;
                int m=a;
                if(n>m)
                    swap(n,m);
                k=m-n;
                k=k*(sqrt(5.0)+1)/2;
                if(k==n)
                    printf("%d %d\n",n,m);
            }
        }
    }
    return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved