亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

您現(xiàn)在的位置是:首頁 > 技術閱讀 >  邏輯面試題:圖解1+1=2最復雜的打開方式

邏輯面試題:圖解1+1=2最復雜的打開方式

時間:2024-02-12



01
故事起源
一個邏輯學教授,有三個學生,而且三個學生都非常聰明!  
有一天教授給他們出了一個題:  
  • 教授在每個人腦門上貼了一張紙條
  • 每個人的紙條上都寫了一個正整數(shù),且某兩個數(shù)的和等于第三個數(shù)
  • 每個人可以看見另兩個數(shù),但看不見自己的
教授問第一個學生:你能猜出自己的數(shù)嗎?回答:不能。  
問第二個,不能;第三個,不能。  
教授再問第二次:  
第一個,不能;第二個,不能;第三個,我猜出來了,是144!  
教授很滿意的笑了,請問你能猜出另外兩個人的數(shù)嗎?


02
場景重現(xiàn)
要破解這個問題,就要先扮演這個角色,我們來場景模擬一下,3個同學圍繞站成一個圈。
為方便描述,用下面的圖形來表示。
因為只能看到別人的數(shù),看不到自己的,所以小K的視角是這樣的。
同樣小A的視角是這樣的。
小B的視角是這樣的。
發(fā)現(xiàn)了什么規(guī)律嗎,我們總結一下:  
  • 每個人自己的數(shù)只能是另兩數(shù)之和或者之差,所以每個人都有2種可能。
  • 每個人都無法確認自己到底是哪一個,也不能從其他人那里得到更多信息。
因此,看上去貌似是個死局。  
再仔細思考,既然只有2種可能,那能不能排除一種可能,這樣只剩下另一種肯定就是正確答案了。關鍵是如何去尋找這個突破口呢?


03
尋找突破口
要排除不可能的解,必須要從邊界入手,如果沒有任何條件限制,那這就是一個無解的問題。
再回到問題描述,“每個人的紙條上都寫了一個正整數(shù)”,這就是最關鍵的信息,它暗示了很多其它信息。如果有一個人計算出來的數(shù)不是正整數(shù),那這一種情況就被排除。
這個數(shù)不可能是負數(shù),因為2個不相等的數(shù),一定是用大的減去小的,那剩下的非正整數(shù)就只能是0,也就是有2個數(shù)相等的情況。

假設小K看到的是這樣的場景,那一定能猜到自己的數(shù)就是10。
現(xiàn)在有了一點進展,但還是不夠,因為2個數(shù)相等也只是一種巧合,大部分的時候,你看到的數(shù)都不相等,感覺還是很難走下去。
先別想得太復雜,咱們來降維打擊。


04
從小規(guī)模分析
關注小K很久的同學應該已經發(fā)現(xiàn)了,小K最喜歡用的手段,就是從小規(guī)模開始分析問題,再逐層推進。
如果2個數(shù)相等,抽象一下,不就是一個最簡單的1+1=2的問題嗎?
如果是下面這種情況,會在第1輪由第1人直接猜出。
同樣對于另外2個人也是一樣,能在自己的輪次直接猜出。
我們似乎已經解決了3種場景了,應該是走對了,繼續(xù)往下推,再擴大數(shù)據(jù)規(guī)模。不過相等的我們已經列舉完了,都可以歸類為1+1=2的問題,那怎么推廣到不等呢?


05
第1人猜不出
第1輪詢問,如果第1人猜不出,對于后面的人來說給出了另一個信息,就是這3個數(shù)肯定不是(2,1,1),因為如果是(2,1,1)那第1人肯定就猜出來了啊。
那怎么利用這個信息呢?
如果小A看到的場景剛好是這樣,(2,y,1),那y不是1,肯定就是3了呀。
總結一下前面的情況。


06
第2人猜不出
如果第2人猜不出,對于第3人來說,也給出了很多信息,說明一定不是(2,1,1),(1,2,1),(2,3,1)。
如果第3人剛好看到的是(2,1,z),(1,2,z),(2,3,z),那就可以直接猜出。
總結第1輪分別能被3人猜出的情況如下:
而且我們發(fā)現(xiàn),每一個人能猜出的情況,是由前2個人能猜出的情況迭代過來的。因為前面的人猜不出就排除了一種可能,只剩下另一種,自然能被后面的人猜出。


07
第2輪
如果第1輪第3人也沒猜出,就會進入下一輪。
第2輪第1人能猜出的情況如下:
同理第2輪第2人能猜出的情況如下:
第2輪第3人能猜出的情況如下:
回到開始的問題,第3個同學在第2輪猜出自己是144,所以上面的16個解中,第3個數(shù)字能整除144的,都是符合條件的解。
正確的解有5個:(3,1,4),(1,3,4),(2,7,9),(4,5,9),(3,5,8)。
對應的另外兩個數(shù)分別是:(108,36),(36,108),(32,112),(64,80),(54,90)。


08
任意情況
比如為(98,27,71)的情況,根據(jù)上面的規(guī)律,最終還是會回歸到1+1=2的問題。
結論:  
  • 3個數(shù)要先約掉公約數(shù),等比例的情況都是相同的
  • 任意情況,都會在有限輪次之后被某個人猜出來
  • 最先猜出來的人,一定是數(shù)字最大的人
  • 所有邏輯推理的根基都是1+1=2
  • 每多一輪,解的個數(shù)以斐波那契數(shù)列遞增


09
代碼實現(xiàn)

9.1
定義及初始化
struct Node {
    int x, y, z, level;
};
Node f[10000];
int last1, last2, tail;
void init() {
    f[0] = Node{2111};
    f[1] = Node{1212};
    f[2] = Node{2312};
    f[3] = Node{1123};
    f[4] = Node{2133};
    f[5] = Node{1233};
    f[6] = Node{2353};
    last1 = 3;
    last2 = 1;
    tail = 7;
}

9.2
關鍵算法
// 第round輪,第person人,猜出自己是x
void solve(int round, int person, int x) {
    int n = (round - 2) * 3 + person, total;
    for (int i = 0; i < n; ++i) {
        total = tail;
        for (int j = last2; j < total; ++j) {
            if (i % 3 == 0) {
                f[tail++] = Node{f[j].y + f[j].z, f[j].y, f[j].z, 4 + i};
            } else if (i % 3 == 1) {
                f[tail++] = Node{f[j].x, f[j].x + f[j].z, f[j].z, 4 + i};
            } else {
                f[tail++] = Node{f[j].x, f[j].y, f[j].x + f[j].y, 4 + i};
            }
        }
        last2 = last1;
        last1 = total;
    }
    for (int i = last1; i < tail; ++i) {
        int temp = 0;
        switch (person) {
            case 1:
                temp = f[i].x;
                break;
            case 2:
                temp = f[i].y;
                break;
            case 3:
                temp = f[i].z;
                break;
        }
        if (x % temp == 0) {
            int s = x / f[i].z;
            printf("(%d, %d, %d), level=%d\n", f[i].x * s, f[i].y * s, f[i].z * s, f[i].level);
        }
    }
}

9.3
主過程
int main() {
    init();
    solve(23144);
    return 0;
}

9.4
數(shù)據(jù)測試輸出
(10836144), level=6
(36108144), level=6
(32112144), level=6
(6480144), level=6
(5490144), level=6


10
總結
第一眼看上去覺得簡單,初步思考發(fā)現(xiàn)沒有思路,感覺有難度,認真一步一步的分析下去,又會發(fā)現(xiàn)其實還是很簡單,關鍵在于能否發(fā)現(xiàn)本質規(guī)律。這是一道極強的邏輯推理,大家一定要認真分析領悟,相信你可以學到很多的知識,打開思維模式。

本文原創(chuàng)作者:小K,一個思維獨特的寫手。
文章首發(fā)平臺:微信公眾號【小K算法】。

如果喜歡小K的文章,請點個關注,分享給更多的人,小K將持續(xù)更新,謝謝啦!


關注下方公眾號,分享硬核知識



關注我,漲知識
原創(chuàng)不易,感謝分享
轉發(fā),點贊,在看


往期精彩回顧
經典智力面試題:一家人過橋
微軟面試題:紅帽子與黑帽子
圖解堆排序算法
分享給更多朋友,轉發(fā)點贊在看
主站蜘蛛池模板: 阿巴嘎旗| 吉隆县| 江川县| 西乌珠穆沁旗| 怀化市| 雷山县| 千阳县| 枣庄市| 龙海市| 内丘县| 长垣县| 铁力市| 霸州市| 宜宾市| 荣昌县| 师宗县| 怀化市| 电白县| 玉屏| 原阳县| 德令哈市| 饶河县| 虞城县| 永平县| 蕲春县| 镇平县| 华阴市| 阳信县| 甘南县| 无锡市| 巴彦淖尔市| 阳原县| 绥滨县| 平利县| 镶黄旗| 吴桥县| 青岛市| 漳平市| 宁国市| 大丰市| 手游|