微软面试题:买啤酒问题
1元钱买一瓶啤酒。
2个空瓶换一瓶啤酒。
问10元能买几瓶啤酒?
再问n元能买几瓶啤酒?
答:第一次:10瓶
第二次:10个空瓶换5个啤酒
第三次:5个空瓶换2个啤酒,剩一个空瓶
第四次:算上上次的空瓶,3个空瓶换1个啤酒,剩一个空瓶
第五次:算上第四次的一个空瓶,2个空瓶换1个啤酒,最后剩1个空瓶。结束。
合计:10+5+2+1+1=19
于是我推测公式:
第一次:10
第二次:10*1/2
第三次:10*1/(2^2)
第四次:10*1/(2^3)
第五次:10*1/(2^4),四舍五入为1(这步出错)
于是我归纳为10(1+1/2+1/2^2+...+1/2^n)
取极限为10(2-1/2^n)
公式中n=4,结果为19.375,取整为19。
问:当9元可买多少瓶?
9元可买9(2-1/2^n)
取n=4,结果为17.4375,取整17。
这个n的取法在于初始金额m<2^n,即可。我当时面试时取的时m>2^n时,n取最大值。
增加m<2^n这个条件后,公式m(2-1/2^n)=2m-m/2^n<2m-1.
所以,买啤酒问题实际的解是2m-1,即10元为19瓶,9元为17瓶。
考官的解为2m-1,用数学归纳法证明。这个证明未考虑详细。故不讨论。
1 Console.WriteLine("买啤酒问题:一元买一瓶啤酒,两个空瓶换一瓶啤酒,问10元能买多少瓶啤酒?n元呢?请输入啤酒金额:"); 2 3 decimal money; 4 5 while (!Decimal.TryParse(Console.ReadLine(), out money)); 6 7 int count = 0;//次数 8 9 List<int> beerTotal = new List<int>(); 10 11 int full = (int)money;//啤酒 12 13 beerTotal.Add(full); 14 15 int empty = 0;//空瓶 16 17 while (true) 18 19 { 20 21 //喝酒,出来空瓶了 22 23 empty += full; 24 25 Console.WriteLine("第{0}次,买{1}瓶啤酒,有{2}瓶空瓶", count++, full, empty); 26 27 //空瓶2换1啤酒 28 29 full = empty / 2; 30 31 //使用列表记录对话瓶数,最后统计 32 33 beerTotal.Add(full); 34 35 //剩余多少个啤酒 36 37 empty = empty % 2; 38 39 //当换不了啤酒就结束吧。 40 41 if (full == 0) 42 43 break; 44 45 } 46 47 Console.WriteLine("{0}元可以买{1}瓶啤酒,哦顺便告诉你还剩{2}个空瓶", money, beerTotal.Sum(), empty); 48 49 Console.ReadKey();
View Code
转载于:https://www.cnblogs.com/czg10047/p/3907343.html
微软面试题:买啤酒问题相关推荐
- 历届试题 买不到的数目
历届试题 买不到的数目 时间限制:1.0s 内存限制:256.0MB 问题描述 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友来买糖的时候,他就 ...
- 答与微博前端教主在吃饭时讨论到的一道微软面试题
加引号是因为我不知道是否真是微软面试题.题目是这样的: 有一车在某无限长公路上行驶,其起始位置和单位时间内速度均为有限大整数(正负不确定), 现有一仪器,在每一时间单位内可以探测1次车是否在指定位置, ...
- 试题 历届试题 买不到的数目(dp/数学)
试题 历届试题 买不到的数目 资源限制 时间限制:1.0s 内存限制:256.0MB $Daily English 曾几何时,我流连梦境,心比天高,人生充满希望. I dreamed a dream ...
- 微软面试题:正则表达式提取链接地址
写出正则表达式,从一个字符串中提取链接地址.比如下面字符串中 "IT面试题博客中包含很多 <a href=http://hi.baidu.com/mianshiti/blog/cat ...
- 微软面试题:有100万个数字(1到9),其中只有1个数字重复2次,如何快速找出该数字
/******************************************************************************* 文 件 名 : test100.cpp ...
- 微软面试题之数字谜题方案
微软面试题之数字谜题方案 设有两个自然数m,n,2〈=m<=99. S先生知道这两数的和s,P先生知道这两数的积p.他们两人进行了如下的对话: S:我知道你不知道这两个数是什么,但我也不知道. ...
- 微软面试题之数字谜题 (转)
微软面试题之数字谜题 (转)[@more@] 设有两个自然数m,n,2〈=m<=99. S先生知道这两数的和s,P先生知道这两数的积p.他们两人进行了如下的对话: S:我知道你不知道这两个数是什 ...
- 烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一 个小时十五分钟呢?(微软面试题)
烧一根不均匀的绳,从头烧到尾总共需要1个小时.现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?(微软面试题) 解法: 三根绳子三个步骤: 先拿出两个绳子第一个绳子从一头点火,第 ...
- 微软面试题:站在地球上的某一点,向南走一公里,然后向东走一公里,最后向北走一公里,回到了原点。地球上有多少个满足这样条件的点?
微软面试题:站在地球上的某一点,向南走一公里,然后向东走一公里,最后向北走一公里,回到了原点.地球上有多少个满足这样条件的点? 分析:这是一道智力题.从逻辑上来讲,题目从好像缺少了一次向西的过程,才可 ...
最新文章
- postgresql开发中可能有用的知识
- Centos nginx 安装 源码方式安装
- 阿里疯传,手把手教你如何从0开始开展UI自动化测试?
- 百度地图api location 211 sn校验失败
- [java进阶]4.关键字throws和throw
- leetcode 35. 搜索插入位置 思考分析
- linux conda创建虚拟环境
- Python 爬取近十万条程序员招聘数据,告诉你哪类人才和技能最受热捧! | 原力计划...
- Flutter基础(四)开发Flutter应用前需要掌握的Basic Widget
- vue json对象转数组_vue的数据驱动原理及简单实现
- fms安装教程 linux_linux通过fms搭建流媒体服务器Flash Media Server
- 太原今年实施一批大数据重大项目
- 红孩儿编辑器模块设计7
- linux mysql 开发环境_RedHat Linux下QT平台MySQL数据库开发环境配置
- 计算机笔记--【并发编程①】
- matlab 积分函数曲线,Matlab之函数积分 | 学步园
- VC2008下使用OpenSSL 1.0.0g(免编译)
- 「双软认定」软件企业需要满足什么条件?
- 视频教程-清华-尹成老师-Python爬虫day13-Python
- C语言字符集中可显示字符,C++_C语言转义字符实例详解,在字符集中,有一类字符具有 - phpStudy...