QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: atfa

挑战你的智力极限

[复制链接]
发表于 2003-7-15 12:39:38 | 显示全部楼层
python程序,就是效率比较低
#!/usr/bin/python
f0 = lambda min,max:map(lambda (x,y) : (x,y,x+y,x*y), \
[(x,y) for x in range(min,max) for y in range(min,max) if x <= y])

f1 = lambda elm,lst:len(filter(lambda e1,elm=elm:e1[2] == elm[2], lst)) > 1 and len(filter(lambda e1,elm=elm:e1[2] == elm[2] and f2(e1, lst), lst)) == 0

f2 = lambda elm,lst: len(filter(lambda e1,elm=elm:e1[3] == elm[3], lst)) == 1

f3 = lambda elm,lst: len(filter(lambda e1,elm=elm:e1[2] == elm[2], lst)) == 1

set0 = f0(2, 100)

set1 = filter(lambda elm,lst=set0:f1(elm,lst), set0)

set2 = filter(lambda elm,lst=set1:f2(elm,lst), set1)

set3 = filter(lambda elm,lst=set2:f3(elm,lst), set2)

print set3
回复

使用道具 举报

发表于 2003-7-21 14:03:29 | 显示全部楼层
没错,就是方块5!
前两句话将黑桃,草花排除,第三句将A排除,第四句将红桃Q,4排除.
回复

使用道具 举报

发表于 2003-8-12 17:29:40 | 显示全部楼层
方块5没错的拉!!!
回复

使用道具 举报

发表于 2003-8-13 09:44:12 | 显示全部楼层
yes
回复

使用道具 举报

发表于 2003-8-13 22:57:20 | 显示全部楼层
为什么第二句可以排除草花?不明白~~~~黑桃和草花里同样有4啊~
回复

使用道具 举报

发表于 2003-8-17 15:14:07 | 显示全部楼层
眼晕
回复

使用道具 举报

发表于 2003-11-11 20:51:54 | 显示全部楼层
absolutely 方块5

To 鬼谷子's problem, though I get the method,I fail to finish the program.All in all,it's interesting.
回复

使用道具 举报

发表于 2003-11-19 13:34:31 | 显示全部楼层
我觉得应该是黑4
回复

使用道具 举报

发表于 2003-11-22 20:10:11 | 显示全部楼层
must be 方块5
回复

使用道具 举报

发表于 2003-11-22 22:43:48 | 显示全部楼层
我用Java写的,对顶楼问题的解答。
[code:1]
import java.util.*;

public class Demo {
        private static Vector mulList;
        private static Hashtable table;
        public static void main(String[] args) {
                init();
                Enumeration enu = table.keys();
                outputResult();
        }

        private static void init() {
                table = new Hashtable();
                for (int i = 4; i < 199; i++) {
                        if (isPossible(i)) {
                                Integer sum = new Integer(i);
                                table.put(sum, mulList);
                        }
                }
        }

        private static boolean isPossible(int sum) {
                mulList = new Vector();
                int max = (sum < 100) ? sum : 100;
                for (int a = 2; a < max; a++) {
                        int b = sum - a;
                        if (b < 2 || b > 99)
                                continue;

                        if (isSingleSoln(a, b))
                                return false;
                }
                return true;
        }

        private static boolean isSingleSoln(int a, int b) {
                int mul = a * b;
                Integer mulObj = new Integer(mul);
                if (!mulList.contains(mulObj))
                        mulList.addElement(new Integer(mul));
                for (int i = 2; i < 100; i++) {
                        if (mul % i == 0) {
                                int j = mul / i;
                                if (j < 2 || j > 99)
                                        continue;
                                if (i != a && i != b)
                                        return false;
                        }
                }
                return true;
        }

        private static void outputResult() {
                Vector repeat = new Vector();
                Vector once = new Vector();
                Enumeration enu = table.keys();
                while (enu.hasMoreElements()) {
                        Integer key = (Integer)enu.nextElement();
                        Vector list = (Vector)table.get(key);
                        for (int i = 0; i < list.size(); i++) {
                                Integer mul = (Integer)list.elementAt(i);
                                if (!repeat.contains(mul)) {
                                        if (once.contains(mul)) {
                                                repeat.addElement(mul);
                                                once.remove(mul);
                                        }
                                        else {
                                                once.addElement(mul);
                                        }
                                }
                        }
                }

                enu = table.keys();
                while (enu.hasMoreElements()) {
                        Integer key = (Integer)enu.nextElement();
                        Vector list = (Vector)table.get(key);
                        if (list.retainAll(once))
                        {
                                if (list.size() == 1)
                                {
                                        output(key.intValue(), ((Integer)list.firstElement()).intValue());
                                        break;
                                }
                        }
                }
        }

        private static void output(int sum, int mul)
        {
                int max = (sum < 100) ? sum : 100;
                for (int a = 2; a < max; a++)
                {
                        int b = sum - a;
                        if (a * b == mul)
                        {
                                System.out.println("These two numbers are: " + a + ", " + b);
                                break;
                        }
                }
        }
}
[/code:1]
回复

使用道具 举报

发表于 2003-11-26 13:46:56 | 显示全部楼层
4 is right.
回复

使用道具 举报

发表于 2003-11-26 23:20:39 | 显示全部楼层
请解释。
谢谢
回复

使用道具 举报

发表于 2003-11-27 02:09:05 | 显示全部楼层
[quote:b31c983ad4="moonsky"]下面出一题,如找出答案的,智商起码达到140:
P先生、Q先生都具有足够的推理能力。这天,他们正在接受推理面试。
他们知道桌子的抽屉里有如下16张扑克牌:
红桃   A、Q、4
黑桃   J、8、4、2、7、3
草花   K、Q、5、4、6
方块   A、5
约翰教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉P先生,把这张牌的花色告诉Q先生。这时,约翰教授问P先生和Q先生:你们能从已知的点数或花色中推知这张牌是什么牌吗?
P先生:"我不知道这张牌。" Q先生:"我知道你不知道这张牌。"
P先生:"现在我知道这张牌了。" Q先生:"我也知道了。" 请问:这张牌是什么牌?[/quote]

答案是方块5,解答如下:
1、P先生:"我不知道这张牌。" 那么,这张牌的点数至少出现2次,只有A、4、5、Q。
2、Q先生:"我知道你不知道这张牌。" 那么,这张牌的花色中每个点数都至少出现了2次,只有红桃和方块。
3、现在,我们的范围里只有“红桃   A、Q、4”和“方块   A、5”
4、P先生:"现在我知道这张牌了。"那么,这张牌一定不是A。
5、Q先生:"我也知道了。" 那么,这张牌一定不是红桃。
6、所以,这张牌是方块5。
回复

使用道具 举报

发表于 2003-11-27 10:57:31 | 显示全部楼层
2、Q先生:"我知道你不知道这张牌。" 那么,这张牌的花色中每个点数都至少出现了2次,只有红桃和方块。

里面怎么不包括草花呢?
回复

使用道具 举报

发表于 2003-12-8 22:02:36 | 显示全部楼层
一定是方块5
P先生:"我不知道这张牌 表明是A,Q,4,5
Q先生:"我知道你不知道这张牌。"  表明是方块或红桃
P先生:"现在我知道这张牌了 表明不是A
Q先生:"我也知道了。 表明是方块5(如是红桃,Q仍无法确定)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 05:31 , Processed in 0.064221 second(s), 12 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表