枯荣修士 发表于 2017-3-18 09:09

[笔记]震惊!一道难的令人发指的推理题,电脑只用了几十毫秒就算出答案!

本帖最后由 wushaominkk 于 2018-3-20 10:42 编辑

这个也算是一个老题目了


看了后,花了不少时间仍然没解出来


题目的图片:


后来就用易语言,写了个小程序


运行后,我震惊了!!!


仅仅用了63ms就解出来了!!!


截图如下:


不要以为,只是写了一个改变文本框和弹出对话框的东西


感兴趣可以自己下载源文件扒一扒看


高富帅通道:



论坛注册已经两年多了
积分才25,希望大家多多支持{:17_1067:}
http://attach.52pojie.cn/forum/201703/14/175419wyaribrkkrxz5kn5.png

屌丝通道:https://pan.baidu.com/s/1bptKQlh密码:der3

夏520 发表于 2017-3-18 09:19

大白痴先生 发表于 2017-11-16 01:46

这个题目不是特别严谨,比如第四题,“哪两道题的答案相同”,是不是暗示其他的两两的答案都不同呢?没有说明确。楼主给的确实是一个答案,但是楼主可以参考一下下面的答案,是不是也满足要求?
2, 4, 4, 2, 2, 4, 4, 2, 2, 2

我是写了一个C#的程序,用的就是最朴素的算法,并没有非常考虑性能问题。

void Main()
{
        for (int q1 = 1; q1 <= 4; q1++)
        {
                for (int q2 = 1; q2 <= 4; q2++)
                {
                        for (int q3 = 1; q3 <= 4; q3++)
                        {
                                for (int q4 = 1; q4 <= 4; q4++)
                                {
                                        for (int q5 = 1; q5 <= 4; q5++)
                                        {
                                                if ((q2 == 1 && q5 != 3) ||
                                                  (q2 == 2 && q5 != 4) ||
                                                        (q2 == 3 && q5 != 1) ||
                                                        (q2 == 4 && q5 != 2))
                                                {
                                                        continue;
                                                }
                                                if (q4 == 1 && q1 != q5)
                                                {
                                                        continue;
                                                }
                                                if (q5 == 2 && q5 != q4)
                                                {
                                                        continue;
                                                }
                                                for (int q6 = 1; q6 <= 4; q6++)
                                                {
                                                        if ((q3 == 1) && (q3 == q6 || q3 == q2 || q3 == q4))
                                                        {
                                                                continue;
                                                        }
                                                        if ((q3 == 2) && (q6 == q3 || q6 == q2 || q6 == q4))
                                                        {
                                                                continue;
                                                        }
                                                        if ((q3 == 3) && (q2 == q3 || q2 == q6 || q2 == q4))
                                                        {
                                                                continue;
                                                        }
                                                        if ((q3 == 4) && (q4 == q3 || q4 == q6 || q4 == q2))
                                                        {
                                                                continue;
                                                        }

                                                        for (int q7 = 1; q7 <= 4; q7++)
                                                        {
                                                                if (q4 == 2 && q2 != q7)
                                                                {
                                                                        continue;
                                                                }
                                                                if (q5 == 4 && q5 != q7)
                                                                {
                                                                        continue;
                                                                }
                                                                for (int q8 = 1; q8 <= 4; q8++)
                                                                {
                                                                        if (q5 == 1 && q5 != q8)
                                                                        {
                                                                                continue;
                                                                        }
                                                                        if (q6 == 1 && ((q2 != q4 || q4 != q8 || q2 != q8)))
                                                                        {
                                                                                continue;
                                                                        }
                                                                        if (q6 == 2 && ((q1 != q6 || q1 != q8 || q6 != q8)))
                                                                        {
                                                                                continue;
                                                                        }
                                                                        if ((q8 == 1 && (Math.Abs(q7 - q1) == 1)) ||
                                                                          (q8 == 2 && (Math.Abs(q5 - q1) == 1)) ||
                                                                                (q8 == 3 && (Math.Abs(q2 - q1) == 1)))
                                                                        {
                                                                                continue;
                                                                        }
                                                                        for (int q9 = 1; q9 <= 4; q9++)
                                                                        {
                                                                                if (q4 == 3 && q1 != q9)
                                                                                {
                                                                                        continue;
                                                                                }
                                                                                if (q5 == 3 && q5 != q9)
                                                                                {
                                                                                        continue;
                                                                                }
                                                                                if (q6 == 4 && ((q5 != q9 || q5 != q8 || q9 != q8)))
                                                                                {
                                                                                        continue;
                                                                                }
                                                                                if (q9 == 1 && ((q1 == q6) == (q6 == q5)))
                                                                                {
                                                                                        continue;
                                                                                }
                                                                                if (q9 == 3 && ((q1 == q6) == (q2 == q5)))
                                                                                {
                                                                                        continue;
                                                                                }
                                                                                if (q9 == 4 && ((q1 == q6) == (q9 == q5)))
                                                                                {
                                                                                        continue;
                                                                                }
                                                                                for (int q10 = 1; q10 <= 4; q10++)
                                                                                {
                                                                                        if (q4 == 4 && q6 != q10)
                                                                                        {
                                                                                                continue;
                                                                                        }
                                                                                        if (q6 == 3 && ((q3 != q10 || q3 != q8 || q10 != q8)))
                                                                                        {
                                                                                                continue;
                                                                                        }
                                                                                        if (q8 == 4 && (Math.Abs(q10 - q1) == 1))
                                                                                        {
                                                                                                continue;
                                                                                        }
                                                                                        if (q9 == 2 && ((q1 == q6) == (q10 == q5)))
                                                                                        {
                                                                                                continue;
                                                                                        }
                                                                                        int[] a = { q1, q2, q3, q4, q5, q6, q7, q8, q9, q10 };
                                                                                        int repeat_max = a.GroupBy(s => s).OrderByDescending(s => s.Count()).Select(s => s.Count()).First();
                                                                                        int repeat_min = a.GroupBy(s => s).OrderByDescending(s => s.Count()).Select(s => s.Count()).Last();
                                                                                        int repeat_min_item = a.GroupBy(s => s).OrderByDescending(s => s.Count()).Last().Key;
                                                                                       
                                                                                        if ((q10 == 1 && (repeat_max - repeat_min) != 3) ||
                                                                                          (q10 == 2 && (repeat_max - repeat_min) != 2) ||
                                                                                          (q10 == 3 && (repeat_max - repeat_min) != 4) ||
                                                                                          (q10 == 4 && (repeat_max - repeat_min) != 1))
                                                                                        {
                                                                                                continue;
                                                                                        }

                                                                                        if ((q7 == 1 && repeat_min_item != 3) ||
                                                                                          (q7 == 2 && repeat_min_item != 2) ||
                                                                                          (q7 == 3 && repeat_min_item != 1) ||
                                                                                          (q7 == 4 && repeat_min_item != 4))
                                                                                        {
                                                                                                continue;
                                                                                        }
                                                                                       
                                                                                        Console.WriteLine(q1);
                                                                                        Console.WriteLine(q2);
                                                                                        Console.WriteLine(q3);
                                                                                        Console.WriteLine(q4);
                                                                                        Console.WriteLine(q5);
                                                                                        Console.WriteLine(q6);
                                                                                        Console.WriteLine(q7);
                                                                                        Console.WriteLine(q8);
                                                                                        Console.WriteLine(q9);
                                                                                        Console.WriteLine(q10);
                                                                                        Console.WriteLine("=====================================");
                                                                                }
                                                                        }
                                                                }
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }


}

Alfred斯斯 发表于 2017-3-18 09:20

表示没看明白!!!!!!!!!!!!!

自然卷的88 发表于 2017-3-18 09:21

不明觉厉

79狼烟 发表于 2017-3-18 09:21

感谢分享

zxnet777 发表于 2017-3-18 09:26

有点费脑。。。

吴WLTon 发表于 2017-3-18 09:34

他是网易的

隔壁大苏。 发表于 2017-3-18 09:36

看不懂咋怎{:1_907:}

哥不年轻 发表于 2017-3-18 09:36

有点蒙啊试试

luojiulin 发表于 2017-3-18 09:37

谢谢分享
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: [笔记]震惊!一道难的令人发指的推理题,电脑只用了几十毫秒就算出答案!