主题:一道变态题目,谁来解决??
syg558
[专家分:30] 发布于 2007-08-25 20:44:00
一个人想了两个2-99之间的数,将和告诉了甲,将积告诉了乙.
甲对乙说:"我敢肯定你不知道这两个数,但我也不知道."
乙说:"我本来也不知道,听你这样一说,我就知道了."
甲说:"我也知道了."
没有输入数据,输出两个数.
回复列表 (共25个回复)
11 楼
syg558 [专家分:30] 发布于 2007-09-12 21:22:00
haha
12 楼
万里长城 [专家分:340] 发布于 2007-09-15 17:42:00
骗人的?
13 楼
007bond [专家分:540] 发布于 2007-09-19 17:42:00
begin
writeln(trunc(random*98)+2,trunc(random*98)+2));
end.
真是神经病!
14 楼
wyc4662 [专家分:0] 发布于 2007-09-28 21:53:00
先想出两个数不能同时是几再来问人吧!
15 楼
Lovely哆啦 [专家分:1360] 发布于 2007-10-06 16:30:00
一道推理题.
首先这两个数不可能是2,2,因为2-99之间只有2*2=4,所以如果是4,乙就会知道;
不可能是2,3,因为2-99之间只有2*3=6,2+3=5,所以如果是2和3,甲和乙都知道了
……
……
……
一直往后推就行了。
有很多种答案!
16 楼
旗木卡卡西 [专家分:90] 发布于 2007-10-17 18:55:00
2,6
17 楼
angwuy [专家分:2280] 发布于 2007-10-17 19:27:00
突然想到些东西:
甲对乙说:"我敢肯定你不知道这两个数,但我也不知道."
这说明了,甲得到的数不能分解成两个质数之和
18 楼
angwuy [专家分:2280] 发布于 2007-10-17 19:34:00
符合以上条件的只有:
11
17
23
27
29
35
37
41
47
51
53
57
59
65
67
71
77
79
83
87
89
93
95
97
101
107
113
117
119
121
123
125
127
131
135
137
143
145
147
149
155
157
161
163
167
171
173
177
179
185
187
189
191
197
计算过程:
var a:array[1..400]of boolean;
b:array[1..32767]of boolean;
i,j:integer;
begin
fillchar(a,sizeof(a),true);
a[1]:=false;
for i:=2 to 20 do
if a[i] then
for j:=2 to 400 div i do
a[i*j]:=false;
fillchar(b,sizeof(b),0);
for i:=2 to 400 do
for j:=2 to 400 do
if a[i] and a[j] then
b[i+j]:=true;
for i:=4 to 198 do
if not b[i] then writeln(i);
end.
19 楼
angwuy [专家分:2280] 发布于 2007-10-17 19:36:00
乙说:"我本来也不知道,听你这样一说,我就知道了."
这说明了把乙的数分解后,只有一组的和等于以上数
20 楼
angwuy [专家分:2280] 发布于 2007-10-17 19:43:00
依照这一条,得出有:
18=2*9
24=3*8
28=4*7
30=2*15
50=2*25
52=4*13
54=2*27
72=3*24
76=4*19
92=4*23
96=3*32
98=2*49
100=4*25
112=7*16
124=4*31
140=7*20
144=3*48
148=4*37
152=8*19
160=5*32
172=4*43
176=11*16
182=2*91
188=4*47
192=3*64
208=13*16
212=4*53
216=8*27
220=4*55
228=3*76
232=8*29
242=2*121
244=4*61
260=5*52
266=2*133
268=4*67
280=7*40
288=9*32
290=2*145
292=4*73
304=16*19
308=7*44
316=4*79
332=4*83
336=16*21
338=2*169
344=8*43
356=4*89
374=2*187
384=3*128
388=4*97
392=8*49
400=16*25
...
计算过程:
const ys:array[1..54]of integer=(11,17,23,27,29,35,37,41,47,51,53,57,59,65,67,71,77,
79,83,87,89,93,95,97,101,107,113,117,119,121,123,
125,127,131,135,137,143,145,147,149,155,157,161,163,
167,171,173,177,179,185,187,189,191,197);
var a,b,c:array[1..32767]of byte;
procedure ok(n:integer);
var i:integer;
begin
for i:=2 to (n-2)div 2 do
begin
b[i*(n-i)]:=i;
c[i*(n-i)]:=n-i;
inc(a[i*(n-i)]);
end;
end;
var i:integer;
begin
assign(output,'out2.txt');
rewrite(output);
fillchar(a,sizeof(a),0);
for i:=1 to 54 do
ok(ys[i]);
for i:=1 to 10000 do
if a[i]=1 then writeln(i,'=',b[i],'*',c[i]);
end.
我来回复