金刚狼与小狗灰

题目链接: link.
原题:山上住着一只金刚狼与一只小狗灰,它们都认为一直以来是自己独享整座山,直到有一天它们相遇,它们都感到自己的领地受到了侵犯,互不相让,一场精彩狼狗大战即将上演,但是它们突然想起现在早已进入了文明社会,它们不能再用拳脚争斗了,看来今天只能通过智力一决高低,来决定谁才是这座山的拥有者,谁才是真正的犬科之王,比赛是这样的,它们都有一个可以容纳橙子的袋子,这两个袋子是由一位数学大师制作而成,容量大小被神奇的设置成了第N个素数,现在有一堆总数为M的橙子,从金刚狼开始轮流用袋子把橙子运到自己的家里,每次取的橙子数是任意的但不能为零,也不能超出袋子的容量,最后橙子被取完了不能拿的为败者,它们两个都采取最优策略,谁会取胜呢?

输入
首先输入两个正整数 N,M(1<N<1000,1e5<M<1e7)
输出
如果金刚狼取胜输出JGL666 如果小狗灰取胜输出XGH666
样例1

输入
1 999999
输出
XGH666

博弈论
一.巴什博弈。(同余理论)
只有一堆n个物品,两个人轮流从中取物,规定每次最少取一个,最多取m个,最后取光者为胜。

   if(n%(m+1)==0)  cout<<"后手必胜"<<endl;  else cout<<"先手必胜"<<endl;

二。威佐夫博弈。(黄金分割)

有两堆各若干的物品,两人轮流从其中一堆取至少一件物品,至多不限,或从两堆中同时取相同件物品,规定最后取完者胜利。
解题核心就是:看两个数的差值t是不是满足 (sqrt(5)+1)/2*t==min(n1,n2);

#include <cstdio>
#include <cmath>
#include <iostream>
using namespace std;
int main()
{  int n1,n2,temp;  while(cin>>n1>>n2)  {  if(n1>n2)  swap(n1,n2);  temp=floor((n2-n1)*(1+sqrt(5.0))/2.0);  if(temp==n1) cout<<"后手必胜"<<endl;  else cout<<"先手必胜"<<endl;  }  return 0;
}

三。尼姆博弈。(异或理论)

有任意堆物品,每堆物品的个数是任意的,双方轮流从中取物品,每一次只能从一堆物品中取部分或全部物品,最少取一件,取到最后一件物品的人获胜。

解题核心:把每堆物品数全部异或起来,如果得到的值为0,那么先手必败,否则先手必胜。

#include <cstdio>
#include <cmath>
#include <iostream>
using namespace std;
int main()
{  int n,ans,temp;  while(cin>>n)  {  temp=0;  for(int i=0;i<n;i++)  {  cin>>ans;  temp^=ans;  }  if(temp==0)  cout<<"后手必胜"<<endl;  else cout<<"先手必胜"<<endl;  }  return 0;
}

四。斐波那契博弈。

有一堆物品,两人轮流取物品,先手最少取一个,至多无上限,但不能把物品取完,之后每次取的物品数不能超过上一次取的物品数的二倍且至少为一件,取走最后一件物品的人获胜。

解题核心:先手胜当且仅当n不是斐波那契数(n为物品总数)

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
const int N = 55;
int f[N];
int main()
{    f[0] = f[1] = 1;    for(int i=2;i<N;i++)    f[i] = f[i-1] + f[i-2]   int n;    while(cin>>n)    {    if(n == 0) break;    bool flag = 0;    for(int i=0;i<N;i++)    {    if(f[i] == n)    {    flag = 1;    break;    }    }    if(flag) puts("Second win");    else     puts("First win");    }    return 0;
}

五。环形博弈。

n个石子围成一个环,每次取一个或者取相邻的2个。

解题核心:石子数目小于等于2 先手胜,其他 后手胜。

六。对称博弈。

对称博弈

    n个石子围成环,每次只能取相邻的1 - k个①如果k < n:对k=1,如果n能被2整除,则后手赢如果k>1,后手赢(先手取什么位置后手就取对称的位置,这样保证后手永远能取到)② 如果k>=n:先手赢.

该题很明显是一堆物品,每次最多取第n个素数个,显然是第一种博弈论。

#include<bits/stdc++.h>
using namespace std;
bool prime(int x)
{if(x<2) return false;else{for(int i=2;i<=x/i;i++){if(x%i==0) return false;}}return true;
}
int main()
{int n,m;cin>>n>>m;int sum=0,t;for(int i=1;;i++){if(prime(i)) sum++;if(sum==n)                      {t=i;break;} }if(m%(t+1)==0) cout<<"XGH666"<<endl;//博弈论else cout<<"JGL666"<<endl;return 0;
}

2021-5-21-博弈论--金刚狼与小狗灰相关推荐

  1. 2021年9月电子学会图形化一级编程题解析含答案:小狗进圈

    [此题目来自2021年9月份电子学会] [青少年软件编程(图形化)等级考试试卷(一级)] 三.编程题(共2题,共30分) 37.小狗进圈 小狗非常听话,收到命令能在舞台上向右移动,如下图所示,它只能移 ...

  2. 【编程题】【Scratch一级】2021.09 小狗进圈

    小狗进圈 小狗非常听话,收到命令能在舞台上向右移动,如下图所示,它只能移动到相邻的圈里,不能跑到圆圈外. 1. 准备工作 (1)背景:根据上图绘制背景: (2)删除小猫角色,添加角色:Dog2: (3 ...

  3. 小狗钱钱_✅每次构建待办事项列表应用程序时,都会有一只小狗? 死了?

    小狗钱钱 by Hrishi Mittal 由Hrishi Mittal ✅每次构建待办事项列表应用程序时,都会有一只小狗 ? 死了? (✅ Every time you build a to-do ...

  4. [匈牙利] 洛谷 P2526 小狗散步

    题目背景 Grant喜欢带着他的小狗Pandog散步.Grant以一定的速度沿着固定路线走,该路线可能自交.Pandog喜欢游览沿途的景点,不过会在给定的N个点和主人相遇.小狗和主人同时从(X1,Y1 ...

  5. 《小狗钱钱》:理财首先应该有一种强烈的意识

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. <小狗钱钱>读完了.以下是个人觉得很有帮助和启发意义的摘抄. 1) "忽视就是 ...

  6. codeup21691 买小猫小狗

    codeup21691 买小猫小狗 时空限制    1000ms/16MB 题目描述 某动物饲养中心用X元专款购买小狗(每只A元)和小猫(每只B元)两种小动物. 要求专款专用,(至少猫狗各一),正好用 ...

  7. 《小狗钱钱》读书笔记

    前言 生活篇 建立目标 实践的重要性 树立自信 幸运的前提 财富篇 开源 节流 信用卡陷阱 消费贷款 养鹅 资产规划 陶穆太太的建议 投资三大原则 基金 题外话 总结 前言 <小狗钱钱>这 ...

  8. 全网推荐的理财小白必读书目《小狗钱钱》,有那么好吗?

    既然今天说的是书,那么我们先一起思考一个问题吧,什么样的书算是一本好书?其实这个问题跟什么样的饭算一顿好饭是一个道理. 不同的人,在不同的人生阶段对一本书是好是坏的评价标准一定是不同的,想考专八的人, ...

  9. 小狗钱钱《读书笔记》系列(上)

    文章目录 第一章:白色的拉不拉多猎狗读后感 第二章:梦想储蓄罐和梦想像册读后感 第三章:达瑞,一个很能挣钱的男孩 第四章:表哥的挣钱之道 第五章:钱钱以前的主人 第六章:债务--爸爸妈妈犯下的错误 第 ...

最新文章

  1. 全变量进气系统伺服马_三种伺服电动缸系统的特点
  2. Hibernate two table same id
  3. 中英文论文高效排版插件一一 Tip ( Text Image P rocessing )
  4. oracle数据库连接时报12514_Oracle 数据库 SQLPlus连接正常、PLSQL连接报错 ORA-12514、TNSPING正常...
  5. python中的接口
  6. java 运行异常处理_Java编程异常处理和I/O流
  7. [分布式一致性协议] ------ raft协议的解释与理解
  8. Doxygen with Graphviz to generate call graph on Mac
  9. SQL 常用语句大全
  10. unity获得运动物体前后时刻的位置坐标pos值
  11. Axure8.0如何汉化?
  12. 优酷1080P的KUX视频如何快速转换成MP4格式
  13. Halcon教程系列/启蒙----(1)初识Halcon
  14. word方式编辑EPUB电子书
  15. Android的屏幕多样性支持
  16. 传统图片超分算法——双三次插值 (Bicubic)、附C++源码
  17. Python设计模式之模版模式(16)
  18. HTTP和RTSP简介
  19. android多线程处理的方法以及应用场景
  20. 景深--摄影基础理论(1)

热门文章

  1. 利用js写一个函数,实现翻转任意数组。 写一个函数,实现对数字数组的排序。
  2. 算法之狄克斯特拉算法 --《图解算法》
  3. 微型投影仪第五篇——Metro UI
  4. 国产麒麟系统忘记密码重置办法(5步解决)
  5. Windows 批量打印
  6. java 根据pdf模板表单生成对应pdf(用于荣誉证书等生成)
  7. Java 二十三种设计模式
  8. postman,请求前置脚本,Pre-requests Script
  9. centos下设置屏保
  10. 免费顶级域名.OVH注册申请全过程附成功注册小技