QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: atfa

挑战你的智力极限

[复制链接]
发表于 2003-12-8 22:04:53 | 显示全部楼层
嘻嘻,我没看答案,我用了8分钟
回复

使用道具 举报

发表于 2003-12-11 00:40:01 | 显示全部楼层
唯一答案:方块5
回复

使用道具 举报

发表于 2003-12-11 00:41:42 | 显示全部楼层
第一感觉用了0.1秒,验证用了30秒
回复

使用道具 举报

发表于 2003-12-14 22:48:44 | 显示全部楼层
老大们都很牛
回复

使用道具 举报

发表于 2003-12-16 17:20:40 | 显示全部楼层
我一开始认为是黑桃4,现在在想怎么看出是方块5。
回复

使用道具 举报

发表于 2003-12-16 17:38:52 | 显示全部楼层
方块5 和 红桃Q
怎么排除?
回复

使用道具 举报

发表于 2003-12-16 18:27:30 | 显示全部楼层
1 P先生:"我不知道这张牌。" - 单牌 (黑桃J、8、2、7、3、草花K、6)
2 Q先生:"我知道你不知道这张牌。" - 草花(勉强) - 黑桃4(这时Q先生还无法看出答案,那就可以排除黑桃4了。)
3 P先生:"现在我知道这张牌了。" - A
4 Q先生:"我也知道了。" - 红桃
5 推得方块5

按照这个思路,我觉得,在第2步如果不排除草花的话,后面别想推出方块5来。
回复

使用道具 举报

发表于 2003-12-23 11:40:47 | 显示全部楼层
晕~~~~~~~~~~~~~了!~
回复

使用道具 举报

发表于 2003-12-25 14:29:41 | 显示全部楼层
小僧考虑这道题时想到了歌德巴赫猜想......
回复

使用道具 举报

发表于 2004-1-30 11:16:26 | 显示全部楼层
方片5,比第一个简单多了
回复

使用道具 举报

发表于 2004-1-30 13:32:01 | 显示全部楼层
以前做过的,是方块5
回复

使用道具 举报

发表于 2004-2-3 16:47:42 | 显示全部楼层
我从2开始逐一排除法得出的是2与9
庞提到的11,因为11可分解为
2,9
3,8
4,7
5,6
所以孙拿到的数字可能为(每组数的乘积)
18
24
28
30
都不能推出唯一一对因子,所以庞肯定孙不知道。
而孙拿到18,可分解为
2,9
3,6
因3+6=9,庞无法作出如上判断,所以只能是2x9=18

我不知道还有没有其它的数字对符合这个要求。
回复

使用道具 举报

发表于 2004-2-8 14:51:48 | 显示全部楼层
[quote:335fde7210="iamroot"][quote:335fde7210="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。[/quote]
我觉得这里面有点问题:
(Q先生:"我知道你不知道这张牌。")时应该已经知道P先生这张牌的点数是A、4、5、Q。所以不能通过这句话就能确定“ 那么,这张牌的花色中每个点数都至少出现了2次,只有红桃和方块。”,Q先生还不知道这个牌的确定点数所以只能排除黑桃。(P先生:"现在我知道这张牌了。")我只能说他牛
回复

使用道具 举报

发表于 2004-2-17 01:01:45 | 显示全部楼层
赫赫
我也是方块5
回复

使用道具 举报

发表于 2004-3-1 19:46:50 | 显示全部楼层
/*
* Created on 2003-11-23
*
* 一日,鬼谷子在2--100这99个数字中选了2个数字,然后把它们的和告诉了庞涓,
* 把积告诉了孙膑。当然,庞涓不知道积是多少,孙膑不知道和是多少。 第二日,
* 庞涓遇见孙膑很傲慢的对孙膑说:"虽然我不知道这两个数是多少但是我肯定你
* 也不知道。"孙膑立刻还击道:"本来我不知道的,但是现在我知道这两个数是多
* 少了。"庞涓想了一 会,说道:"现在我也知道这两个数是多少了。"   
* 请问这二个数各是多少?
*/

/**
* @author mhx
* @exception Exception
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/

import java.util.*;
class ETwoEqualNumber extends Exception{}
class EInvalidParam extends Exception{}

class IntPair{
        public IntPair(int i1,int i2)throws ETwoEqualNumber{
                if(i1 == i2)
                        throw new ETwoEqualNumber();
                n1 = i1;
                n2 = i2;       
        }
        public String toString(){
                return "{"+Integer.toString(n1) +" & " +Integer.toString(n2)+"}";
        }
        public int hashCode(){
                return n1 + n2;
        }
        public boolean equals(Object o){
               
                boolean res = (o instanceof IntPair) && (
                  ((IntPair)o).n1 == n1 && ((IntPair)o).n2 == n2
                  ||
                  ((IntPair)o).n1 == n2 && ((IntPair)o).n2 == n1
                );
                return res;       
        }
        public int sum(){
                return n1 + n2;
        }
        public int mult(){
                return n1 * n2;
        }
        int n1;
        int n2;
       
        public static void main(String [] args)throws Exception{
                HashSet hs = new HashSet();
                hs.add(new IntPair(2,3));
                hs.add(new IntPair(3,2));
                hs.add("x");
                hs.add("x");
       
                System.out.println(hs);
               
        }
}
public class Answer {
        static HashSet getIntPairsBySum(int sum)throws EInvalidParam{
          if (sum < (2*smallNumber + 1)|| sum > (2*bigNumber - 1))
                  throw new EInvalidParam();
          HashSet hs = new HashSet();
          int top = Math.min(sum/2,bigNumber);
          for (int i = smallNumber; i <= top;i++)
                  if (i != sum - i)
                          try{
                                  hs.add(new IntPair(i,sum - i));
                          }catch(ETwoEqualNumber e){
                                  System.err.println(e);
                          }
          return hs;       
        }
        static HashSet getIntPairsByMult(int mult)throws EInvalidParam{
                if(mult <(smallNumber * (smallNumber + 1)) || mult > (bigNumber * (bigNumber - 1)))
                        throw new EInvalidParam();
                HashSet hs = new HashSet();
                for(int i = smallNumber;i < bigNumber;i++){
                        if (mult%i == 0 && i != mult/i && mult/i >= smallNumber && mult/i <= bigNumber)
                                try{
                                        hs.add(new IntPair(i,mult/i));
                                }catch(ETwoEqualNumber e){
                                System.err.println(e);
                                }       
                               
                }
                return hs;       
        }
        public static void usage(){
                System.out.println("USAGE:");
                System.out.println("java Answer smallNumber bigNumber");
                System.out.println("such as: java Answer 2 100");
                System.exit(0);
        }
        public static void main(String[] args) throws Exception{
                //check params
                if (args.length != 2)
                        usage();
                try{
                        smallNumber = Integer.parseInt(args[0]);
                        bigNumber = Integer.parseInt(args[1]);
                        if (smallNumber >= bigNumber)
                                throw new Exception();
                }catch(Exception e){
                        usage();
                }
               
               
                HashSet hs1,hs2;
                HashSet sums = new HashSet();
               
                F1:
                for (int i = (2*smallNumber + 1);i <= (2*bigNumber - 1);i++){
                        hs1 = getIntPairsBySum(i);
                        Iterator it1 = hs1.iterator();
                       
                        while(it1.hasNext()){
                                IntPair ip = (IntPair)it1.next();
                                hs2 = getIntPairsByMult(ip.mult());
                       
                                if (hs2.size() <= 1)
                                        continue F1;
                        }
                        sums.add(new Integer(i));
                }
               
                System.out.print("possible sums :" + sums);
                System.out.println(" count = "+sums.size());
                HashSet mults = new HashSet();
                F2:
                for (int i = (smallNumber * (smallNumber + 1));i<=(bigNumber * (bigNumber - 1));i++){
                        hs1 = getIntPairsByMult(i);
                        Iterator it1 = hs1.iterator();
                        int count = 0;
                        while(it1.hasNext()){
                                IntPair ip = (IntPair)it1.next();
                                if (sums.contains(new Integer(ip.sum()))){
                                        count++;
                                }       
                                if (count >=2)
                                        continue F2;
                        }
                        if (count == 1){
                                mults.add(new Integer(i));
                        }
                }
                System.out.print("possible multiplies :" +mults);
                System.out.println(" count = "+mults.size());
               
                HashSet result = new HashSet();
                Iterator it = sums.iterator();
                W:
                while(it.hasNext()){
                        int val = ((Integer)it.next()).intValue();
                        HashSet hs = getIntPairsBySum(val);
                        Iterator it1  = hs.iterator();
                        int count = 0;
                        IntPair ip = null;
                        IntPair ip2 = null;
                        while(it1.hasNext()){
                                ip = (IntPair)it1.next();
                                if (mults.contains(new Integer(ip.mult()))){
                                        count++;
                                        ip2 = ip;
                                }       
                                if (count >= 2)
                                        continue W;
                        }
                        if (count == 1){
                                if (ip == null)
                                        throw new Exception("impossible! count is 1,but ip is null!");
                                result.add(ip2);
                        }
                }
                System.out.println("===================================");
                if (result.size() != 1){
                        System.out.println("sorry,i can\'t find out the answer!");
                }else{
                        System.out.println("the Answer is:" + result.iterator().next());
                }
        }
        private static int smallNumber = 0;
        private static int bigNumber = 1;
}
回复

使用道具 举报

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

本版积分规则

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

© 2021 Powered by Discuz! X3.5.

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