博弈游戏(2)

题目详情:

AB两个人玩一个取石子游戏,一共有n (n>=2)个石子,要求和规则如下:

(1)第一次由 A先取,至少取一个石子,至多取(n-1)个。

(2) 两个人轮流取石子,后面一个人取石子的数目至少为1,至多为上一个人石子数的2倍。

(3) 取到最后一颗石子的人为胜利者

(4) 两个人足够聪明。

问A是否有必胜策略?如果有的话,第一次他可以取多少个石子?如果有必胜策略,返回A第一次可以取得石子数可以保证必胜,并且如果有多个答案输出最小的。如果A无法必胜,输出-1。(2 <= n <= 100000000)

以前看到过,好像是斐波那契数列,写了暴力测试了一下,果然。

#include<iostream>
using namespace std;int dfs(int turn,int n,int big){//轮到turn是否能赢if(n==0) return 0;for(int i=1;i<=big;i++)if(dfs(1-turn,n-i,i*2)==0)return 1;return 0;
}
int main(){int n;while(cin>>n){for(int i=2;i<=n;i++){int ans=dfs(0,i,i-1);printf("%d -- %d\n",i,ans);}}//2,3,5,8,13,21,34是必败点return 0;
}

结果还是错了,因为要输出最小的。

如果n-fibo[i-1]是fibo数,表示将进入必败,所以拿掉,剩下fibo[i-1]让对手进入必败。否则对剩下的数进行拿取。

int win (int n)
{int fibo[45],i;fibo[0]=1,fibo[1]=1;for(i=2;i<45;i++){//斐波那契数列fibo[i]=fibo[i-1]+fibo[i-2];}for(i=0;i<45;i++)if(n<=fibo[i])break;if(n==fibo[i])return -1;else{int rst=win(n-fibo[i-1]);if(rst==-1)return n-fibo[i-1];elsereturn rst;}return 0;
}

CSDN 编程挑战 博弈游戏2 斐波那契相关推荐

  1. 吴昊品游戏核心算法(新年特别篇)——另类取石子游戏(斐波那契博弈)

    吴昊继续,我再也不想搬一堆石头放在这里了,取而代之的是<编程之美>中的关于游戏章节的一个插图,这本书中也有对<取石子游戏>的较为完备的讨论. 这次的游戏是神马? 1堆石子有n个 ...

  2. Python - Python3 编程第一步 Fibonacci series: 斐波纳契数列

    Fibonacci series: 斐波纳契数列, 两个元素的总和确定了下一个数,例如:1 1 2 3 5 8 13 21 34 55 Python程序如下: def fibonacci1(n):a, ...

  3. 计蒜客挑战难题:简单斐波那契

    斐波那契数列是一种非常有意思的数列,由 00 和 11 开始,之后的斐波那契系数就由之前的两数相加.用数学公式定义斐波那契数列则可以看成如下形式: F_0=0F ​0 ​​ =0 F_1=1F ​1 ...

  4. 斐波那契数列112358c语言编程,c语言中的斐波那契数列

    本文概述 C中的斐波那契数列:对于斐波那契数列,下一个数字是前两个数字的和,例如0.1.1.2.3.5.8.13.21等.斐波那契数列的前两个数字为0和1. 编写fibonacci系列程序的方法有两种 ...

  5. 巴什博奕,威佐夫博奕,尼姆博奕,斐波那契博弈模板

    1.巴什博奕 只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜. 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够 ...

  6. 斐波那契数列的低效与高效解法 【转】

    文章来自:http://blog.csdn.net/mshantingting/article/details/22689573 斐波那契数列(又名黄金分割数列)在数学上的定义如下: 许多人包括作者自 ...

  7. 牛客网-斐波那契数列

    牛客网编程题–>大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0),其中n<=39. 用递归结构写斐波那契数列. #include < ...

  8. 斐波那契兔子问题(递归实现)

    版权声明:本文为博主原创文章,转载请注明:https://blog.csdn.net/m_655_/article/details/88396602 斐波那契兔子问题: 13世纪意大利数学家斐波那契在 ...

  9. HDU 2516 取石子游戏 斐波纳契博弈

    斐波纳契博弈: 有一堆个数为n的石子,游戏双方轮流取石子,满足: 1)先手不能在第一次把所有的石子取完: 2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍) ...

最新文章

  1. 你的企业在什么情况下需要人工智能?快来看看你需要具备哪些条件与能力吧!...
  2. spark sql的简单操作
  3. 如何实现在O(n)时间内排序,并且空间复杂度为O(1)
  4. 有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。利
  5. 怎样写 OpenStack Neutron 的 Extension (四)
  6. Android插件化开发之AMS与应用程序(客户端ActivityThread、Instrumentation、Activity)通信模型分析
  7. 10用户账户控制只有否_【新书连载】测试工程师核心开发技术(10)—数据库体系结构...
  8. oracle数据库使用hint来让模糊查询走索引
  9. java入门到精通6版pdf_java从入门到精通第6章.pdf
  10. js中最简单base64图片流实现自动下载
  11. dnf服务器运行库,游戏运行库|3DM游戏必备运行库合集安装包(史上最全) V3.0
  12. SQL 基础教程 练习题 Chapter 1
  13. 栅格数据矢量化(附有完整代码)
  14. 勒索病毒端口勒索病毒通过哪个端口传播
  15. JVM-垃圾回收机制
  16. Ubuntu20.04安装gamit10.7
  17. Panel重要参数解析
  18. 西部旅游杂志西部旅游杂志社西部旅游编辑部2022年第19期目录
  19. 串口屏储存器不够,自己扩展怎么操作?
  20. Echarts双Y轴图表处理

热门文章

  1. 使用DBeaver连接IRIS数据库
  2. 日期 计算器(代码打开)
  3. VS2017 下QT工程不能生成moc文件的解决方法
  4. 华为自研系统鸿蒙为什么也要基于linux来开发?
  5. apt-get update出现无法连接上 archive.ubuntukylin.com:10006
  6. D2C-Net: A Dual-branch, Dual-guidance and Cross-refine Network for Camouflaged Object Detection阅读笔记
  7. securityCRT使用小结
  8. vb 复制 剪贴板 html,用vb实现将脚本的输出复制到剪贴板
  9. Visual Studio 2017、2019 调试Docker无法启动,卡在vsdbg\vs2017u5 exists, deleting.
  10. (三)Kotlin加密/解密之AES和DES