zoukankan      html  css  js  c++  java
  • 博弈入门

    巴什博奕

    巴什博奕: 题目的  类型就是

    各位勇敢者要玩的第一个游戏是什么呢?很简单,它是这样定义的:
    1、  本游戏是一个二人游戏;
    2、  有一堆石子一共有n个;
    3、  两人轮流进行;
    4、  每走一步可以取走1…m个石子;
    5、  最先取光石子的一方为胜;
    
    如果游戏的双方使用的都是最优策略,请输出哪个人能赢。

    巴什博弈:  以上面的 题目为例   当 最后剩下只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜.

          只要能做到  给对方  留下 m+1 个 物品 己方就可以获得胜利 .  只要能做到一次的 将对方 挑选之前将剩下的物品数量变成 (m+1)*n  那么 当 地方挑选完之后 ,己方可以 将  剩余物品 在此变成 (m+1)*(n-1)

    下面附上习题

    Brave Game

    http://acm.hdu.edu.cn/showproblem.php?pid=1846

    各位勇敢者要玩的第一个游戏是什么呢?很简单,它是这样定义的:
    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

     

    下面附上  自己的 水货代码

    //   如果 第一个人 要输的话  只能 在最开始的时候 第一个人 就陷入了 总数能被(n+1)整除的 困境
    #include<stdio.h>
    int main()
    {
        int t,n,m;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&n,&m);
            if(n%(m+1))              // 不等于0 的 情况下  执行下一句
                printf("first
    ");   
            else
                printf("second
    ");
        }
    
        return 0;
    }

    悼念512汶川大地震遇难同胞——选拔志愿者

    选拔规则如下:
    1、最初的捐款箱是空的;
    2、两人轮流捐款,每次捐款额必须为正整数,并且每人每次捐款最多不超过m元(1<=m<=10)。
    3、最先使得总捐款额达到或者超过n元(0<n<10000)的一方为胜者,则其可以亲赴灾区服务。
    我们知道,两人都很想入选志愿者名单,并且都是非常聪明的人,假设林队先捐,请你判断谁能入选最后的名单?

    输入:

    输入数据首先包含一个正整数C,表示包含C组测试用例,然后是C行数据,每行包含两个正整数n,m,n和m的含义参见上面提到的规则。

    输出:

    对于每组测试数据,如果林队能入选,请输出字符串"Grass", 如果徐队能入选,请输出字符串"Rabbit",每个实例的输出占一行。

    Sample Input
    2 8 10 11 10
     

     

    Sample Output
    Grass Rabbit
     1 //   如果 第一个人 要输的话  只能 在最开始的时候 第一个人 就陷入了 总数能被(n+1)整除的 困境
     2 #include<stdio.h>
     3 int main()
     4 {
     5     int t,n,m;
     6     scanf("%d",&t);
     7     while(t--)
     8     {
     9         scanf("%d%d",&n,&m);
    10         if(n%(m+1))              // 不等于0 的 情况下  执行下一句
    11             printf("Grass
    ");
    12         else
    13             printf("Rabbit
    ");
    14     }
    15 
    16     return 0;
    17 }

    Public Sale

    通过打听,Lele知道这场拍卖的规则是这样的:刚开始底价为0,两个人轮流开始加价,不过每次加价的幅度要在1~N之间,当价格大于或等于田地的成本价 M 时,主办方就把这块田地卖给这次叫价的人。

    Lele和Yueyue虽然考试不行,但是对拍卖却十分精通,而且他们两个人都十分想得到这块田地。所以他们每次都是选对自己最有利的方式进行加价。

    由于Lele字典序比Yueyue靠前,所以每次都是由Lele先开始加价,请问,第一次加价的时候,
    Lele要出多少才能保证自己买得到这块地呢?

    输入:

    本题目包含多组测试,请处理到文件结束(EOF)。每组测试占一行。
    每组测试包含两个整数M和N(含义见题目描述,0<N,M<1100)

    输出:

    对于每组数据,在一行里按递增的顺序输出Lele第一次可以加的价。两个数据之间用空格隔开。
    如果Lele在第一次无论如何出价都无法买到这块土地,就输出"none"。

    Sample Input
    4 2 3 2 3 5
     

     

    Sample Output
    1 none 3 4 5
     1 #include<stdio.h>
     2 int main()
     3 {
     4     int m,n,i,j,price;
     5     while(scanf("%d%d",&m,&n)!=EOF)
     6     {
     7         price=m%(n+1);
     8         if(price==0)
     9             printf("none
    ");
    10         else
    11         {
    12             printf("%d",price);
    13             for(price++;price<=n&&price>=m;price++)
    14                 printf(" %d",price);
    15             printf("
    ");
    16         }
    17     }
    18 }
  • 相关阅读:
    Markdown语法
    BASH 特性和快捷键
    jstl标注标签库
    搭建以太坊私网
    spring-装配bean
    java语法糖
    centos7 安装jdk、Tomcat
    合约实战,代币合约,DAPP开发
    solidity数据类型
    solidity合约面向对象
  • 原文地址:https://www.cnblogs.com/A-FM/p/5232587.html
Copyright © 2011-2022 走看看