找回密码
 欢迎注册
楼主: gxqcn

[分享] 试试你有多聪明——经典逻辑智力题50例

[复制链接]
 楼主| 发表于 2008-8-31 13:03:39 | 显示全部楼层
第15题不是早就注明了“已由shshsh_0510在132#、mathe在134#、fmtgy在136#解答”吗?

不过,还是非常感谢你的参与。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-9-16 20:28:56 | 显示全部楼层

回复 171# zYr 的帖子

我在一本书上看到这到智力题的解题思路也是填写表格形式完成的,
比较直观,也易于推理,类似于有些人用Excel解“数独”问题。

另,我将表格略作编辑,去除了一些冗余标签。
不过,zYr 来论坛不久,帖子排版质量很高,赞一个。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-9-16 21:12:22 | 显示全部楼层
刚刚更新了一下主题帖,
现在仅仅差 No.36 无人解答了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-9-16 21:56:20 | 显示全部楼层
查了一遍,近期的没找到。
不知是不是老早就有人解答了?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-9-18 07:34:29 | 显示全部楼层
原帖由 zYr 于 2008-9-17 22:14 发表
这“经典逻辑智力题50例”都快做完了,能不能再出个几十例?


你可以试试由 shability 整理的《我整理的一些IQ题目合集》,
我记得里面并未完全解答。

还有 无心人 发的《数学奥林匹克升级题》,也非常有意思。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-9-18 19:56:01 | 显示全部楼层

回复 182# silitex 的帖子

刚才在 VC6.0 下编译出现了大量 error,就略作了下修改:
  1. /************
  2. *  关于爱因斯坦98%的人都回答不出来的粗浅程序, 鉴于网络上没有很好的C参考程序, \
  3. *  这里尝试写一个, 聊博一笑! *^_^*, 请在VC6.0或以上环境编译!
  4. *  Email: silitex@yeah.net
  5. *  注: 如采用原始枚举: (5!)^5 = 24,883,200,000, 在普通的电脑需运行1分钟以上, \
  6. *      故做一个算法优化, 在枚举时, 把已知的2个条件: 牛奶 = 2, 挪威人 = 0, \
  7. *      直接确定; 这样算法的枚举次数为: (4!)^2*(5!)^3 = 995,328,000.
  8. *      用C++的标准做法应该把所有的内容封装成类, 否则太容易因为下表取错而出错!
  9. ***/
  10. #include <stdio.h>
  11. #include <math.h>

  12. #define N       5
  13. #define N_NAME  24  /* Name的枚举次数 */
  14. #define N_COLOR 120
  15. #define N_DRINK 24
  16. #define N_CIG   120
  17. #define N_PET   120

  18. enum E_NAME {ENGLISH, SWEDISH, DANE, NORWEGIAN, GERMAN};
  19. enum E_COLOR {RED, GREEN, WHITE, YELLOW, BLUE};
  20. enum E_DRINK {TEA, COFFEE, MILK, BEER, WATER};
  21. enum E_CIGARETTE {PALLMALL, DUNHILL, BLENDS, BLUEMASTER, PRINCE}; // Cigar类?
  22. enum E_PET {DOG, BIRD, CAT, HORSE, FISH};

  23. const char *NAME[] = {"英国人", "瑞典人", "丹麦人", "挪威人", "德国人"};// 人名
  24. const char *COLOR[] = {"红", "绿", "白", "黄", "蓝"};   // 颜色
  25. const char *DRINK[] = {"茶", "咖啡", "牛奶", "啤酒", "水"}; // 饮料
  26. const char *CIGARETTE[] = {"PallMal", "Dunhill", "混合烟", "BlueMas", \
  27.     "Prince"};  // 香烟
  28. const char *PET[] = {"狗", "鸟", "猫", "马", "鱼"}; // 宠物

  29. extern const int ENUM_NAME[][N];
  30. extern const int ENUM_DRINK[][N];
  31. extern const int ENUM_ALL[][N];

  32. int main(void)
  33. {
  34.     int tmp_name[N];    // 临时数组, 以上面的枚举变量为索引, 指示在第几栋房子
  35.     int tmp_color[N];
  36.     int tmp_drink[N];
  37.     int tmp_cig[N];
  38.     int tmp_pet[N];
  39.     int out_name[N];    // 输出数组, 以第几栋房子为位置, 记录上面的枚举变量值
  40.     int out_color[N];
  41.     int out_drink[N];
  42.     int out_cig[N];
  43.     int out_pet[N];
  44.     int i;
  45.     long per;

  46.     for (int n = 0; n < N_NAME; n++)
  47.     {
  48.         for (i = 0; i < N; i++)
  49.             tmp_name[ENUM_NAME[n][i]] = i;
  50.         for (int c = 0; c < N_COLOR; c++)
  51.         {
  52.             for (i = 0; i < N; i++)
  53.                 tmp_color[i] = ENUM_ALL[c][i];
  54.             for (int d = 0; d < N_DRINK; d++)
  55.             {
  56.                 for (i = 0; i < N; i++)
  57.                     tmp_drink[ENUM_DRINK[d][i]] = i;
  58.                 for (int c2 = 0; c2 < N_CIG; c2++)
  59.                 {
  60.                     for (i = 0; i < N; i++)
  61.                         tmp_cig[i] = ENUM_ALL[c2][i];
  62.                     for (int p = 0; p < N_PET; p++)
  63.                     {
  64.                         for (i = 0; i < N; i++)
  65.                             tmp_pet[i] = ENUM_ALL[p][i];

  66.                         /* 前面的就是枚举所有可能行, 下面的工作就根据条件判断\
  67.                         *  已知我们用掉了5个初始条件, 所以这里判断10个剩余条件.
  68.                         */
  69.                         if (tmp_name[ENGLISH] != tmp_color[RED])
  70.                             continue;
  71.                         if (tmp_name[SWEDISH] != tmp_pet[DOG])
  72.                             continue;
  73.                         if (tmp_name[DANE] != tmp_drink[TEA])
  74.                             continue;
  75.                         if (tmp_color[GREEN] != tmp_drink[COFFEE])
  76.                             continue;
  77.                         if (tmp_cig[PALLMALL] != tmp_pet[BIRD])
  78.                             continue;
  79.                         if (tmp_color[YELLOW] != tmp_cig[DUNHILL])
  80.                             continue;
  81.                         if (tmp_cig[BLUEMASTER] != tmp_drink[BEER])
  82.                             continue;
  83.                         if (tmp_name[GERMAN] != tmp_cig[PRINCE])
  84.                             continue;
  85.                             #if 1   // 绿在白的左边, 且必须为邻居
  86.                         if (tmp_color[GREEN]+1 != tmp_color[WHITE])
  87.                             continue;
  88.                             #else   // 绿在白的左边, 不必为邻居
  89.                         if (tmp_color[GREEN] >= tmp_color[WHITE])
  90.                             continue;
  91.                             #endif
  92.                         if (abs(tmp_cig[BLENDS]-tmp_pet[CAT]) != 1)
  93.                             continue;
  94.                         if (abs(tmp_pet[HORSE]-tmp_cig[DUNHILL]) != 1)
  95.                             continue;
  96.                         if (abs(tmp_name[NORWEGIAN]-tmp_color[BLUE]) != 1)
  97.                             continue;
  98.                             #if 1   // 这个条件多余, 可以不用.
  99.                         if (abs(tmp_cig[BLENDS]-tmp_drink[WATER]) != 1)
  100.                             continue;
  101.                             #endif

  102.                         // 如果上面的条件都满足, 则显示出来
  103.                         for (i = 0; i < N; i++)
  104.                         {
  105.                             out_name[tmp_name[i]] = i;
  106.                             out_color[tmp_color[i]] = i;
  107.                             out_drink[tmp_drink[i]] = i;
  108.                             out_cig[tmp_cig[i]] = i;
  109.                             out_pet[tmp_pet[i]] = i;
  110.                         }
  111.                         printf("\nposi:   0       1       2       3       4");
  112.                         printf("\nname:   %-7s %-7s %-7s %-7s %-7s\n", \
  113.                             NAME[out_name[0]], NAME[out_name[1]], \
  114.                             NAME[out_name[2]], NAME[out_name[3]], \
  115.                             NAME[out_name[4]]);
  116.                         printf("color:  %-7s %-7s %-7s %-7s %-7s\n", \
  117.                             COLOR[out_color[0]], COLOR[out_color[1]], \
  118.                             COLOR[out_color[2]], COLOR[out_color[3]], \
  119.                             COLOR[out_color[4]]);
  120.                         printf("drink:  %-7s %-7s %-7s %-7s %-7s\n", \
  121.                             DRINK[out_drink[0]], DRINK[out_drink[1]], \
  122.                             DRINK[out_drink[2]], DRINK[out_drink[3]], \
  123.                             DRINK[out_drink[4]]);
  124.                         printf("cig:    %-7s %-7s %-7s %-7s %-7s\n", \
  125.                             CIGARETTE[out_cig[0]], CIGARETTE[out_cig[1]], \
  126.                             CIGARETTE[out_cig[2]], CIGARETTE[out_cig[3]], \
  127.                             CIGARETTE[out_cig[4]]);
  128.                         printf("pet:    %-7s %-7s %-7s %-7s %-7s\n", \
  129.                             PET[out_pet[0]], PET[out_pet[1]], \
  130.                             PET[out_pet[2]], PET[out_pet[3]], \
  131.                             PET[out_pet[4]]);
  132.                     }
  133.                 }
  134.             }
  135.             // 显示当前的进度
  136.             per = ((N_COLOR*(long)n)+(long)c+1)*100/(N_NAME*N_COLOR);
  137.             printf("\rProgress: %02d%% ", per);
  138.         }
  139.     }

  140.     return 0;
  141. }

  142. const int ENUM_NAME[][N] = {
  143.     {NORWEGIAN, ENGLISH, SWEDISH, DANE   , GERMAN },
  144.     {NORWEGIAN, ENGLISH, SWEDISH, GERMAN , DANE   },
  145.     {NORWEGIAN, ENGLISH, DANE   , SWEDISH, GERMAN },
  146.     {NORWEGIAN, ENGLISH, DANE   , GERMAN , SWEDISH},
  147.     {NORWEGIAN, ENGLISH, GERMAN , SWEDISH, DANE   },
  148.     {NORWEGIAN, ENGLISH, GERMAN , DANE   , SWEDISH},
  149.     {NORWEGIAN, SWEDISH, ENGLISH, DANE   , GERMAN },
  150.     {NORWEGIAN, SWEDISH, ENGLISH, GERMAN , DANE   },
  151.     {NORWEGIAN, SWEDISH, DANE   , ENGLISH, GERMAN },
  152.     {NORWEGIAN, SWEDISH, DANE   , GERMAN , ENGLISH},
  153.     {NORWEGIAN, SWEDISH, GERMAN , ENGLISH, DANE   },
  154.     {NORWEGIAN, SWEDISH, GERMAN , DANE   , ENGLISH},
  155.     {NORWEGIAN, DANE   , ENGLISH, SWEDISH, GERMAN },
  156.     {NORWEGIAN, DANE   , ENGLISH, GERMAN , SWEDISH},
  157.     {NORWEGIAN, DANE   , SWEDISH, ENGLISH, GERMAN },
  158.     {NORWEGIAN, DANE   , SWEDISH, GERMAN , ENGLISH},
  159.     {NORWEGIAN, DANE   , GERMAN , ENGLISH, SWEDISH},
  160.     {NORWEGIAN, DANE   , GERMAN , SWEDISH, ENGLISH},
  161.     {NORWEGIAN, GERMAN , ENGLISH, SWEDISH, DANE   },
  162.     {NORWEGIAN, GERMAN , ENGLISH, DANE   , SWEDISH},
  163.     {NORWEGIAN, GERMAN , SWEDISH, ENGLISH, DANE   },
  164.     {NORWEGIAN, GERMAN , SWEDISH, DANE   , ENGLISH},
  165.     {NORWEGIAN, GERMAN , DANE   , ENGLISH, SWEDISH},
  166.     {NORWEGIAN, GERMAN , DANE   , SWEDISH, ENGLISH},
  167. };

  168. const int ENUM_DRINK[][N] = {
  169.     {TEA    , COFFEE , MILK   , BEER   , WATER  },
  170.     {TEA    , COFFEE , MILK   , WATER  , BEER   },
  171.     {TEA    , BEER   , MILK   , COFFEE , WATER  },
  172.     {TEA    , BEER   , MILK   , WATER  , COFFEE },
  173.     {TEA    , WATER  , MILK   , COFFEE , BEER   },
  174.     {TEA    , WATER  , MILK   , BEER   , COFFEE },
  175.     {COFFEE , TEA    , MILK   , BEER   , WATER  },
  176.     {COFFEE , TEA    , MILK   , WATER  , BEER   },
  177.     {COFFEE , BEER   , MILK   , TEA    , WATER  },
  178.     {COFFEE , BEER   , MILK   , WATER  , TEA    },
  179.     {COFFEE , WATER  , MILK   , TEA    , BEER   },
  180.     {COFFEE , WATER  , MILK   , BEER   , TEA    },
  181.     {BEER   , TEA    , MILK   , COFFEE , WATER  },
  182.     {BEER   , TEA    , MILK   , WATER  , COFFEE },
  183.     {BEER   , COFFEE , MILK   , TEA    , WATER  },
  184.     {BEER   , COFFEE , MILK   , WATER  , TEA    },
  185.     {BEER   , WATER  , MILK   , TEA    , COFFEE },
  186.     {BEER   , WATER  , MILK   , COFFEE , TEA    },
  187.     {WATER  , TEA    , MILK   , COFFEE , BEER   },
  188.     {WATER  , TEA    , MILK   , BEER   , COFFEE },
  189.     {WATER  , COFFEE , MILK   , TEA    , BEER   },
  190.     {WATER  , COFFEE , MILK   , BEER   , TEA    },
  191.     {WATER  , BEER   , MILK   , TEA    , COFFEE },
  192.     {WATER  , BEER   , MILK   , COFFEE , TEA    },
  193. };

  194. const int ENUM_ALL[][N] = {
  195.     {0,1,2,3,4}, {0,1,2,4,3}, {0,1,3,2,4}, {0,1,3,4,2}, {0,1,4,2,3},
  196.     {0,1,4,3,2}, {0,2,1,3,4}, {0,2,1,4,3}, {0,2,3,1,4}, {0,2,3,4,1},
  197.     {0,2,4,1,3}, {0,2,4,3,1}, {0,3,1,2,4}, {0,3,1,4,2}, {0,3,2,1,4},
  198.     {0,3,2,4,1}, {0,3,4,1,2}, {0,3,4,2,1}, {0,4,1,2,3}, {0,4,1,3,2},
  199.     {0,4,2,1,3}, {0,4,2,3,1}, {0,4,3,1,2}, {0,4,3,2,1}, {1,0,2,3,4},
  200.     {1,0,2,4,3}, {1,0,3,2,4}, {1,0,3,4,2}, {1,0,4,2,3}, {1,0,4,3,2},
  201.     {1,2,0,3,4}, {1,2,0,4,3}, {1,2,3,0,4}, {1,2,3,4,0}, {1,2,4,0,3},
  202.     {1,2,4,3,0}, {1,3,0,2,4}, {1,3,0,4,2}, {1,3,2,0,4}, {1,3,2,4,0},
  203.     {1,3,4,0,2}, {1,3,4,2,0}, {1,4,0,2,3}, {1,4,0,3,2}, {1,4,2,0,3},
  204.     {1,4,2,3,0}, {1,4,3,0,2}, {1,4,3,2,0}, {2,0,1,3,4}, {2,0,1,4,3},
  205.     {2,0,3,1,4}, {2,0,3,4,1}, {2,0,4,1,3}, {2,0,4,3,1}, {2,1,0,3,4},
  206.     {2,1,0,4,3}, {2,1,3,0,4}, {2,1,3,4,0}, {2,1,4,0,3}, {2,1,4,3,0},
  207.     {2,3,0,1,4}, {2,3,0,4,1}, {2,3,1,0,4}, {2,3,1,4,0}, {2,3,4,0,1},
  208.     {2,3,4,1,0}, {2,4,0,1,3}, {2,4,0,3,1}, {2,4,1,0,3}, {2,4,1,3,0},
  209.     {2,4,3,0,1}, {2,4,3,1,0}, {3,0,1,2,4}, {3,0,1,4,2}, {3,0,2,1,4},
  210.     {3,0,2,4,1}, {3,0,4,1,2}, {3,0,4,2,1}, {3,1,0,2,4}, {3,1,0,4,2},
  211.     {3,1,2,0,4}, {3,1,2,4,0}, {3,1,4,0,2}, {3,1,4,2,0}, {3,2,0,1,4},
  212.     {3,2,0,4,1}, {3,2,1,0,4}, {3,2,1,4,0}, {3,2,4,0,1}, {3,2,4,1,0},
  213.     {3,4,0,1,2}, {3,4,0,2,1}, {3,4,1,0,2}, {3,4,1,2,0}, {3,4,2,0,1},
  214.     {3,4,2,1,0}, {4,0,1,2,3}, {4,0,1,3,2}, {4,0,2,1,3}, {4,0,2,3,1},
  215.     {4,0,3,1,2}, {4,0,3,2,1}, {4,1,0,2,3}, {4,1,0,3,2}, {4,1,2,0,3},
  216.     {4,1,2,3,0}, {4,1,3,0,2}, {4,1,3,2,0}, {4,2,0,1,3}, {4,2,0,3,1},
  217.     {4,2,1,0,3}, {4,2,1,3,0}, {4,2,3,0,1}, {4,2,3,1,0}, {4,3,0,1,2},
  218.     {4,3,0,2,1}, {4,3,1,0,2}, {4,3,1,2,0}, {4,3,2,0,1}, {4,3,2,1,0},
  219. };
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-9-19 08:37:24 | 显示全部楼层
估计主要是 include 的同名头文件的干扰吧。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-11-12 07:40:05 | 显示全部楼层
原帖由 疯猪 于 2008-11-12 05:28 发表
两个圆环,半径分别是1和2,小圆在大圆内部绕大圆圆周一周,问小圆自身转了几周?如果在大圆的外部,小圆自身转几周呢?

其实把大圆间断后拉直就可以了
自转数是周长的比 是2周
内外都一样


错!

不信,你自己拿两个相同的硬币在桌子上模拟下,
绕固定硬币滚动一周的硬币,在此过程中自转了两周!(而不是一周)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-12-2 17:07:48 | 显示全部楼层
有没有详细解析啊
这样很难懂
jmyhyu 发表于 2009-12-2 16:58


参见图示:http://bbs.emath.ac.cn/viewthrea ... p;fromuid=8#pid5717
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-3 06:20 , Processed in 0.044727 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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