题目来源:古老的智力题
请回答下面10个问题,你的回答应保证每题惟有你的选择是正确的。
(1)第一个答案是b的问题是哪一个?
(a) 2 (b) 3 (c) 4 (d) 5 (e) 6
(2)恰好有两个连续问题的答案是一样的,它们是:
(a) 2,3 (b) 3,4 (c) 4,5 (d) 5,6 (e) 6,7
(3)本问题答案和哪一个问题的答案相同?
(a) 1 (b) 2 (c) 4 (d) 7 (e) 6
(4)答案是a的问题的个数是:
(a) 0 (b) 1 (c) 2 (d) 3 (e) 4
(5)本问题答案和哪一个问题的答案相同?
(a) 10 (b) 9 (c) 8 (d) 7 (e) 6
(6)答案是a的问题的个数和答案是什么的问题的个数相同?
(a) b (b) c (c) d (d) e (e) 以上都不是
(7) 按照字母顺序,本问题的答案和下一个问题的答案相差几个字母?
(a) 4 (b) 3 (c) 2 (d) 1 (e) 0 (注:a和b相差一个字母)
(8)答案是元音字母的问题的个数是:
(a) 2 (b) 3 (c) 4 (d) 5 (e) 6 (注:a和e是元音字母)
(9)答案是辅音字母的问题的个数是:
(a) 一个质数 (b) 一个阶乘数 (c) 一个平方数 (d) 一个立方数 (e) 5的倍数
(10)本问题的答案是:
(a) a (b) b (c) c (d) d (e) e
很早之前貌似在一本数学趣味书上看过...当时没能推出来...今天突然发现黑书上竟然也有这道题...为了好奇心...写了个程序跑了一下...
可能有一些值得注意或者有歧义的地方,标注一下:
(1)题目要求“你的回答应保证每题惟有你的选择是正确的”,我的理解是在某一个固定的答案下,不能有某题是两个答案都符合的。
比如第二题,不能2,3,4都同一个答案。这样的话第二题既能选a又能选b,不符合题意。(如果不按这种理解的话会跑出很多个答案来...)
(2)第七题中的“相差”一开始理解错了...以为是a和b相差1,b和a就相差-1...于是第八题就选e了...最后发现这样跑不出来...就修改了理解...
应该是比如选c,那么与c相差两个字母的可以是a或者e...
最后跑出来的答案是:c d e b e e d c b a
目测好像是对的...
代码如下:
1#include<cstdio>
2int i[11];
3bool judge1()
4{
5 if(i[1]==1&&i[2]==2) return 1;
6 if(i[1]==2&&i[3]==2&&i[2]!=2) return 1;
7 if(i[1]==3&&i[4]==2&&i[2]!=2&&i[3]!=2) return 1;
8 if(i[1]==4&&i[5]==2&&i[2]!=2&&i[3]!=2&&i[4]!=2)
9 return 1;
10 if(i[1]==5&&i[6]==2&&i[2]!=2&&i[3]!=2&&i[4]!=2&&i[5]!=2)
11 return 1;
12 return 0;
13}
14
15bool judge2()
16{
17 bool flag;int k,j;
18 for(j=1;j<=5;j++)
19 if(i[2]==j&&i[j+1]==i[j+2]){
20 for(k=2,flag=1;k<=6;k++){
21 if(k==j+1) continue;
22 if(i[k]==i[k+1]){flag=0;break;}
23 }
24 if(flag) return 1;
25 }
26 return 0;
27}
28
29bool judge3()
30{
31 if(i[3]==1&&i[3]==i[1]) return 1;
32 if(i[3]==2&&i[3]==i[2]) return 1;
33 if(i[3]==3&&i[3]==i[4]) return 1;
34 if(i[3]==4&&i[3]==i[7]) return 1;
35 if(i[3]==5&&i[3]==i[6]) return 1;
36 return 0;
37}
38
39bool judge4()
40{
41 int cnt=0,k,j;
42 for(j=1;j<=10;j++)
43 if(i[j]==1)
44 cnt++;
45 for(k=1;k<=5;k++)
46 if(i[4]==k&&cnt==k-1)
47 return 1;
48 return 0;
49}
50
51bool judge5()
52{
53 for(int j=1;j<=5;j++)
54 if(i[5]==j&&i[5]==i[11-j])
55 return 1;
56 return 0;
57}
58
59bool judge6()
60{
61 int cnt[6]={0},k,j;bool flag;
62 for(j=1;j<=10;j++) cnt[i[j]]++;
63 for(j=1;j<=4;j++){
64 if(i[6]==j&&cnt[1]==cnt[1+j]){
65 for(k=2,flag=1;k<=5;k++){
66 if(k==1+j) continue;
67 if(cnt[1]==cnt[k]){flag=0;break;}
68 }
69 if(flag) return 1;
70 }
71 }
72 if(i[6]==5&&cnt[1]!=cnt[2]&&cnt[1]!=cnt[3]
73 &&cnt[1]!=cnt[4]&&cnt[1]!=cnt[5])
74 return 1;
75 return 0;
76}
77
78bool judge7()
79{
80 if(i[7]==1&&i[8]==5) return 1;
81 if(i[7]==2&&i[8]==5) return 1;
82 if(i[7]==3&&(i[8]==1||i[8]==5)) return 1;
83 if(i[7]==4&&(i[8]==3||i[8]==5)) return 1;
84 if(i[7]==5&&i[8]==5) return 1;
85 return 0;
86}
87
88bool judge8()
89{
90 int vowel=0,j;
91 for(j=1;j<=10;j++)
92 if(i[j]==1||i[j]==5)
93 vowel++;
94 for(j=1;j<=5;j++)
95 if(i[8]==j&&(vowel==j+1))
96 return 1;
97 return 0;
98}
99
100bool judge9()
101{
102 int csnt=0,j;
103 for(j=1;j<=10;j++)
104 if(i[j]==2||i[j]==3||i[j]==4)
105 csnt++;
106 if(i[9]==1&&(csnt==2||csnt==3||csnt==5||csnt==7))
107 return 1;
108 if(i[9]==2&&(csnt==1||csnt==2||csnt==6))
109 return 1;
110 if(i[9]==3&&(csnt==0||csnt==1||csnt==4||csnt==9))
111 return 1;
112 if(i[9]==4&&(csnt==0||csnt==1||csnt==8))
113 return 1;
114 if(i[9]==5&&(csnt%5==0)) return 1;
115 return 0;
116}
117
118void print()
119{
120 for(int j=1;j<=10;j++)
121 printf("%c ",i[j]+'a'-1);
122 puts("");
123}
124
125int main()
126{
127 for(i[1]=1;i[1]<=5;i[1]++)
128 for(i[2]=1;i[2]<=5;i[2]++)
129 for(i[3]=1;i[3]<=5;i[3]++)
130 for(i[4]=1;i[4]<=5;i[4]++)
131 for(i[5]=1;i[5]<=5;i[5]++)
132 for(i[6]=1;i[6]<=5;i[6]++)
133 for(i[7]=1;i[7]<=5;i[7]++)
134 for(i[8]=1;i[8]<=5;i[8]++)
135 for(i[9]=1;i[9]<=5;i[9]++)
136 for(i[10]=1;i[10]<=5;i[10]++)
137 if(judge1()&&judge2()&&judge3()&&judge4()&&judge5()&&judge6()&&judge7()&&judge8()&&judge9())
138 print();
139 return 0;
140}
posted on 2012-01-19 19:59
NKU->lkjslkjdlk 阅读(211)
评论(0) 编辑 收藏