VJ博弈論基礎練習AB 巴什博弈

A - Brave Game

Description

十年前讀大學的時候,中國每年都要從國外引進一些電影大片,其中有一部電影就叫《勇敢者的遊戲》(英文名稱:Zathura),一直到現在,我依然對於電影中的部分電腦特技印象深刻。
今天,大家選擇上機考試,就是一種勇敢(brave)的選擇;這個短學期,我們講的是博弈(game)專題;所以,大家現在玩的也是“勇敢者的遊戲”,這也是我命名這個題目的原因。
當然,除了“勇敢”,我還希望看到“誠信”,無論考試成績如何,希望看到的都是一個真實的結果,我也相信大家一定能做到的~

各位勇敢者要玩的第一個遊戲是什麼呢?很簡單,它是這樣定義的:
1、 本遊戲是一個二人遊戲;
2、 有一堆石子一共有n個;
3、 兩人輪流進行;
4、 每走一步可以取走1…m個石子;
5、 最先取光石子的一方爲勝;

如果遊戲的雙方使用的都是最優策略,請輸出哪個人能贏。

Input

輸入數據首先包含一個正整數C(C<=100),表示有C組測試數據。
每組測試數據佔一行,包含兩個整數n和m(1<=n,m<=1000),n和m的含義見題目描述。

Output

如果先走的人能贏,請輸出“first”,否則請輸出“second”,每個實例的輸出佔一行。

Sample Input

2
23 2
4 3

Sample Output

first
second

代碼

#include<stdio.h>

int main()
{
	int c;
	int n,m;
	scanf("%d",&c);
	while(c--)
	{
		scanf("%d%d",&n,&m);
		if(n%(1+m)) printf("first\n");
		else printf("second\n"); 
	}
	return 0;
}

B - Public Sale

Description

雖然不想,但是現實總歸是現實,Lele始終沒有逃過退學的命運,因爲他沒有拿到獎學金。現在等待他的,就是像FarmJohn一樣的農田生涯。

要種田得有田才行,Lele聽說街上正在舉行一場別開生面的拍賣會,拍賣的物品正好就是一塊20畝的田地。於是,Lele帶上他的全部積蓄,衝往拍賣會。

後來發現,整個拍賣會只有Lele和他的死對頭Yueyue。

通過打聽,Lele知道這場拍賣的規則是這樣的:剛開始底價爲0,兩個人輪流開始加價,不過每次加價的幅度要在1~N之間,當價格大於或等於田地的成本價 M 時,主辦方就把這塊田地賣給這次叫價的人。

Lele和Yueyue雖然考試不行,但是對拍賣卻十分精通,而且他們兩個人都十分想得到這塊田地。所以他們每次都是選對自己最有利的方式進行加價。

由於Lele字典序比Yueyue靠前,所以每次都是由Lele先開始加價,請問,第一次加價的時候,
Lele要出多少才能保證自己買得到這塊地呢?

Input

本題目包含多組測試,請處理到文件結束(EOF)。每組測試佔一行。
每組測試包含兩個整數M和N(含義見題目描述,0<N,M<1100)

Output

對於每組數據,在一行裏按遞增的順序輸出Lele第一次可以加的價。兩個數據之間用空格隔開。
如果Lele在第一次無論如何出價都無法買到這塊土地,就輸出"none"。

Sample Input

4 2
3 2
3 5

Sample Output

1
none
3 4 5

代碼

#include<stdio.h>
#include<stdbool.h> //注意這個頭文件 

int main()
{
	int m,n;
	bool flag;
	while(scanf("%d%d",&m,&n)!=EOF)
	{
		flag=0;
		if(n>m)
		{
			for(int i=m;i<=n;i++)
			{
				if(!flag)
				{
					flag=1;
					printf("%d",i);
				} 
				else if(flag) printf(" %d",i);
			}
			printf("\n");
		}
		else if(m%(1+n)==0) printf("none\n");
		else printf("%d\n",m%(1+n));
	}
	return 0;
}

學姐的代碼

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n,m;
    while(cin>>n>>m){
        if(m>=n){
            for(int i=n;i<=m;++i){
                if(i==n)cout<<i;
                else cout<<" "<<i;
            }
            cout<<endl;
        }
        else{
            if(n%(m+1)==0)cout<<"none"<<endl;
            else cout<<n%(m+1)<<endl;   //把多餘的s取走,就把狀態轉成了必勝態
        }
    }
    return 0;
}

巴什博弈

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章