主题:一道变态题目,谁来解决??
syg558
[专家分:30] 发布于 2007-08-25 20:44:00
一个人想了两个2-99之间的数,将和告诉了甲,将积告诉了乙.
甲对乙说:"我敢肯定你不知道这两个数,但我也不知道."
乙说:"我本来也不知道,听你这样一说,我就知道了."
甲说:"我也知道了."
没有输入数据,输出两个数.
21 楼
angwuy [专家分:2280] 发布于 2007-10-17 20:17:00
甲说:"我也知道了."
这说明了把甲的数分开后,只有一组的积等于以上数
求出:
4和13,4*13=52,4+13=17
过程:
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;
d:array[1..200]of byte;
procedure ok(n:integer);
var i:integer;
begin
for i:=2 to n-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
fillchar(a,sizeof(a),0);
for i:=1 to 54 do
ok(ys[i]);
for i:=1 to 10000 do
if a[i]=2 then
inc(d[b[i]+c[i]]);
for i:=1 to 200 do
if d[i]=1 then writeln(i);
end.