回 帖 发 新 帖 刷新版面

主题:一道变态题目,谁来解决??

一个人想了两个2-99之间的数,将和告诉了甲,将积告诉了乙. 
    甲对乙说:"我敢肯定你不知道这两个数,但我也不知道." 
    乙说:"我本来也不知道,听你这样一说,我就知道了." 
    甲说:"我也知道了." 
  
    没有输入数据,输出两个数.

回复列表 (共25个回复)

11 楼

haha

12 楼

骗人的?

13 楼

begin
writeln(trunc(random*98)+2,trunc(random*98)+2));
end.
真是神经病!

14 楼

先想出两个数不能同时是几再来问人吧!

15 楼

一道推理题.
首先这两个数不可能是2,2,因为2-99之间只有2*2=4,所以如果是4,乙就会知道;
不可能是2,3,因为2-99之间只有2*3=6,2+3=5,所以如果是2和3,甲和乙都知道了
……
……
……
一直往后推就行了。
有很多种答案!

16 楼

2,6

17 楼

突然想到些东西:
甲对乙说:"我敢肯定你不知道这两个数,但我也不知道."
这说明了,甲得到的数不能分解成两个质数之和 

18 楼

符合以上条件的只有:
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 楼

乙说:"我本来也不知道,听你这样一说,我就知道了." 
这说明了把乙的数分解后,只有一组的和等于以上数

20 楼

依照这一条,得出有:
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.

我来回复

您尚未登录,请登录后再回复。点此登录或注册