免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: zheguzai
打印 上一主题 下一主题

今天的一道逻辑面试题目,大家进来看看…… [复制链接]

论坛徽章:
0
21 [报告]
发表于 2011-10-11 13:29 |只看该作者
编程珠玑 里面有讲这个题目。。这位面试官大概看了这本书吧
前面几位也解释的很清楚了
davelv 发表于 2011-10-11 12:24


论坛徽章:
2
IT运维版块每日发帖之星
日期:2015-09-07 06:20:00IT运维版块每日发帖之星
日期:2015-09-07 06:20:00
22 [报告]
发表于 2011-10-11 13:34 |只看该作者
巧方法之前有人说了,红球每次要么少2个,要么不少,所以最后一定会有一个红球的,这样答案就是红球了

另一种方法,可以忽略个数的限制,初始状态为“奇红奇白”然后根据两种不同的取球方法画有限状态机,画好后由初始状态开始,找到结束状态就行了,这个方法百搭的
对于这个题,第二种方法的状态图就两种状态,灰常简单

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
23 [报告]
发表于 2011-10-11 13:53 |只看该作者
回复  zylthinking


    但是没有原理,这个不能用来说服人啊
phoenixlwp 发表于 2011-10-11 13:27



还没有原理, 你还想要什么原理???

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
24 [报告]
发表于 2011-10-11 13:59 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
25 [报告]
发表于 2011-10-11 14:13 |只看该作者
我算了一下,最终概率结果是:红色有0.25的概率一次减少2个,白色有0.5几率一次减少1个。

论坛徽章:
0
26 [报告]
发表于 2011-10-11 15:26 |只看该作者
本帖最后由 sudayly 于 2011-10-11 18:42 编辑

回复 1# zheguzai


    先回帖在看贴!

每次试验红球/白球的变化数可能为:
红球 0 或 -2
白球 -1 或 +1
这意味着,每次试验,红球的数可能保持不变或者减少2个,而白球可能增加或减少一个。刚开始有99个红球和白球,最后留下的只能是红球。

写了个程序来模拟:
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cstdlib>
  4. using namespace std;

  5. class Game {
  6. private:
  7.         int a_; // No. of white ball
  8.         int b_; // No. of red ball
  9. public:
  10.         Game(int a, int b) : a_(a), b_(b) {}
  11.         void Run() {
  12.                 while (!Stop()) {
  13.                         Next();
  14.                         cout << a_ << " " << b_ << endl;
  15.                 }
  16.         }
  17. private:
  18.         bool Stop() {
  19.                 return a_+b_<=1;
  20.         }
  21.         void Trans1() {
  22.                 a_ += 1;
  23.                 b_ -= 2;
  24.         }
  25.         void Trans2() {
  26.                 a_ -= 1;
  27.         }
  28.         void Next() {
  29.                 if (a_ < 1) {
  30.                         Trans1();
  31.                         return;
  32.                 }
  33.                 if (b_ < 2) {
  34.                         Trans2();
  35.                         return;
  36.                 }
  37.                 if ((rand() * 1.0 / RAND_MAX) <= 0.5) {
  38.                         Trans2();
  39.                 } else {
  40.                         Trans1();
  41.                 }
  42.         }
  43. };

  44. int main(int argc, char *argv[])
  45. {
  46.         srand(time(NULL));

  47.         Game game(99, 99);
  48.         game.Run();

  49.         return 0;
  50. }
复制代码
程序运行结果图示:


这个随机数生成器不给力!!!

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
27 [报告]
发表于 2011-10-12 14:01 |只看该作者
第一次取出两个红球告诉我怎么放白球进去!

论坛徽章:
0
28 [报告]
发表于 2011-10-13 05:25 |只看该作者
回复 1# zheguzai




用面试时的快速思考方法去解。首先可以根据问题先猜测答案唯一。那么取法应该是不固定的,直接考虑极端取法。很快就能得到答案。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP