【智力题】收纳与整理

倒水问题

问题描述:现有 8L 水,有一个 5L 的杯子和一个 3L 的杯子,如何得到 4L 的水?

问题解析:已知条件有三个杯子,8L、5L 和 3L。其中 8L 的杯子是满的。

解决方案:一共 7 步

  1. 将8L的水桶中的水,倒满5L的水桶,这时:8L水桶为3L、5L水桶为5L、3L水桶为0L
  2. 将5L的水桶中的水,倒满3L的水桶,这时:8L水桶为3L、5L水桶为2L、3L水桶为3L
  3. 将3L的水桶中的水,倒入8L的水桶,这时:8L水桶为6L、5L水桶为2L、3L水桶为0L
  4. 将5L的水桶中的水,倒入3L的水桶,这时:8L水桶为6L、5L水桶为0L、3L水桶为2L
  5. 将8L的水桶中的水,倒入5L的水桶,这时:8L水桶为1L、5L水桶为5L、3L水桶为2L
  6. 将5L的水桶中的水,倒满3L的水桶,这时:8L水桶为1L、5L水桶为4L、3L水桶为3L
  7. 将3L的水桶中的水,倒入8L的水桶,这时:8L水桶为4L、5L水桶为4L、3L水桶为0L

摘自:PHP/06-三个水桶等分8升水的问题 -《算法的乐趣》.md at master · xinliangnote/PHP

圆桌放硬币问题

问题描述:一张圆桌子,两个玩家轮流在桌子上放硬币,直到桌子放不下为止。而最后一个放硬币的人赢。请问如果我先放,如何保证我肯定赢?

问题解析

  • 这是一个空间问题
  • 圆是一个对称的图形,除了圆心之外,其余点都能找到对称点。

解决方案:先行者在桌子中心放置一枚硬币,以后的硬币总是放在与后行者刚才放的地方相对称的位置。这样,只要后行者能放,先行者一定也有地方放。先行者必胜。

摘自:智力题——1.圆桌放硬币_郭雪泉的专栏-CSDN博客

放球问题

问题描述:现在有50个红球,50个蓝球,给小明两个袋子,一个袋子能装任意个球(0~100)。 现由小明将这100个球,以一定方法装入这两个袋子。找另找一个不明真相的路人,闭眼,随机从两个袋子中随机选择一个袋子并摸一个球。要使得他摸出红球的概率最高,小明分配这100个球的最佳方案是什么?

问题解析:设从 1 号袋子取出红球概率是 s1,从 2 号袋子取出红球概率是 s2。则取出红球的概率 = 0.5*s1 + 0.5*s2 = 0.5 * (s1 + s2)。题目变为求 `max(s1 + s2)

解决方案:1号袋放入 1 个红球,剩下所有球放入 2 号袋时,概率最大,等于
0.5 * (1 + \frac{49}{99}) \approx 0.5 * (1 + 0.5) \approx 0.75

直接切面问题

摘自:n条直线最多把平面分割成几部分? n个平面最多把空间分割成几部分?_C/C++_Chunzhen的博客-CSDN博客

问题描述:n条直线最多把平面分割成几部分?
问题解析

  • 对于已有的 n 条直线,将平面切割为 a(n) 个平面。
  • 那么增加一条直线,它最多与前n条直线有n个交点,于是被它穿过的区域一分为二,那么增加的区域数等于穿过的区域数
  • 穿过的区域数等于这条线被切割的段数 n+1
  • 于是,就有了a(n+1) = a(n) + n + 1

答案a(n) = \frac{n(n+1)}{2} + 1

如何估计湖中鱼的数量?

原理:抽样
具体方法:从湖中捞出 K 条鱼,然后进行标记,放回湖中;过段时间,再捞出 n 条鱼,其中有 k 条鱼是标记的,设 N 是湖中鱼总数,则有如下等式

\frac{K} {N} = \frac{k} {n}

数组中重复的数字

问题描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

问题解析

  • 特点:数组长度为 n,数组内的数字大小不会超过 n-1
  • 如果使用 hashmap 是无法充分利用该数组的特点。
  • 数组内的元素可以当作数组下标;数组内的元素人为修改成超过 n-1 就可以表示为被访问过。

解决方案

// 关键点:数组长度为 n,数组的元素只能是 0~n-1
    // 思想:元素可以作为下标,当重复的元素得到的下标也是相同的,即重复的元素变为下标时,会访问同一个元素。
    public boolean duplicate(int numbers[]) {
        int length = numbers.length;
        if(numbers == null || length < 1)
            return false;
        for(int i=0;i<length;i++){
            // 将当前元素作为下标,访问number[index]。当后续元素出现了当前元素相同值时,必定会得到相同的index。
            int index = numbers[i] % length;  
            if(numbers[index] >= length){  // 当访问的元素超过n-1时,表明该位置的元素之前被访问过
                return true;
            }
            
            // 由于原先的元素大小不超过n-1,先加一个n,则该元素超过了n-1,表明该元素呗访问过
            numbers[index] = numbers[index] + length; 
        }
        return false;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343