题目来源:古老的智力题
请回答下面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>
2
int i[11];
3
bool 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
15
bool 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
29
bool 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
39
bool 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
51
bool 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
59
bool 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
78
bool 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
88
bool 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
100
bool 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
118
void print()
119

{
120
for(int j=1;j<=10;j++)
121
printf("%c ",i[j]+'a'-1);
122
puts("");
123
}
124
125
int 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 阅读(216)
评论(0) 编辑 收藏