博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
金币银币算法面试题
阅读量:3953 次
发布时间:2019-05-24

本文共 455 字,大约阅读时间需要 1 分钟。

金币银币算法面试题

原题:(同学面试面来的题),如果有 20 个银币,和 1个金币,有A和B两人轮流按照如下规则来取:A先B后,每人每次只能取 1~4 枚,银币取完了后才能取金币(就是说不能同时取金银币),最后取到金币的人赢,问A第一次取多少可以保证稳赢。

题目可以抽象成

a + (Min + Max) * n + 1 = total.
min=1,max=4,total=20,很明显得到a=4

total=20可以很好的理解

那么为什么是min+max乘n呢,因为A第一手拿了,要保证B只能拿最后的那一个的话,就得确保这个min+max是个固定的数。

那么为什么是mix+max呢,因为假如B拿一个的话你就可以拿四个,假如B拿四个的话你就只能拿一个。

这个是本题的关键点,有些人想不通是为什么,因为对手最大可以拿4个,最小可以拿一个,加入对手拿一个你们的和的范围就是2-5,假如拿四个和的范围就是5-8,可以知道唯一可以确保的和就是5。

所以此题可以得出n=3,a=4,即第一手只要拿四个就可以保证稳赢。

转载地址:http://jhrwi.baihongyu.com/

你可能感兴趣的文章
VS2008下使用CppSQLite3访问xgs黑名单表(SQLite数据库)
查看>>
第一个boost程序---timer的使用
查看>>
使用boost asio库实现字节数可控的CS通信
查看>>
linux下串口编程
查看>>
boot asio 非阻塞同步编程---非阻塞的accept和receive。
查看>>
利用ADOX、ADO操纵MDB文件(ACCESS)
查看>>
使用ADO操作MDB,关注数据类型
查看>>
使用windows自带Zip命令压缩文件
查看>>
windows获得文件大小
查看>>
Host 'ETCV3' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
查看>>
mysql高版本兼容老版本的密码格式
查看>>
OCILIB在VS2008中的使用
查看>>
OCILIB VC2008 效率测试
查看>>
PL/SQL设置NUMBER显示为字符串
查看>>
linux ftp 脚本 -- 使用程序执行脚本
查看>>
MFC CListBox的使用
查看>>
VS2008 CString转char字符串
查看>>
VS2008 如何设置mfc对话框最小化
查看>>
VS2008向MFC 对话框 添加托盘图标(显示和消失)
查看>>
托盘使用--最小化到托盘,双击托盘立即还原显示
查看>>