主题:+fin,+分——填数问题
QQ331373582
[专家分:1500] 发布于 2005-06-21 20:16:00
从整数1-10中任取9个不同的数,填入下面9个格中,使所有相邻(左,右,上,下)两个格子中数的和都是素数。试找出所有答案。
例如:
-------------
| 1 | 2 | 5 |
-------------
| 4 | 3 | 8 |
-------------
| 7 |10 | 9 |
-------------
-------------
| | | |
-------------
| | | |
-------------
| | | |
-------------
回复列表 (共4个回复)
沙发
zhaoren [专家分:420] 发布于 2005-07-23 19:55:00
var a:array[1..3,1..3]of integer;
t:integer;
function prim(x:integer):boolean;
var can:boolean;
i:integer;
begin
can:=true;
for i:=2 to trunc(sqrt(x)) do begin
if x mod i=0 then begin
can:=false;break;
end;
end;
prim:=can;
end;
procedure dg(x,y:integer);
var i,j,h,l:integer;
can:boolean;
begin
if x=4 then begin
inc(t);
writeln(t,':');
for i:=1 to 3 do begin
for j:=1 to 3 do write(a[i,j]:4);
writeln;
end;
end else begin
for i:=1 to 10 do begin
can:=true;
for j:=1 to (x-1)*3+y-1 do begin
h:=(j-1)div 3+1;
l:=(j-1)mod 3+1;
if a[h,l]=i then begin
can:=false;break;
end;
end;
if can then begin
if ((y=1)or(prim(a[x,y-1]+i)))and((x=1)or(prim(a[x-1,y]+i))) then begin
a[x,y]:=i;
if y=3 then dg(x+1,1)
else dg(x,y+1);
end;
end;
end;
end;
end;
begin
t:=0;
dg(1,1);
end
(唯一目的,加分~~~~)
板凳
sd5774188 [专家分:260] 发布于 2005-07-25 21:26:00
I faint.平时练习都不用递归的(竞赛时候用了会……)
3 楼
zhaoren [专家分:420] 发布于 2005-08-20 12:21:00
晕
4 楼
lzl1403 [专家分:1670] 发布于 2005-08-24 00:35:00
就用搜索就行了,逐格搜索……
我来回复