主题:请高手帮忙呀
huaipeizi
[专家分:0] 发布于 2005-10-09 13:15:00
把1,2,… 9共9个数排成下列形状的三角形:
a
b c
d e
f g h i
其中:a~i分别表示1,2,...9中的一个数字,并要求同时满足下列条件:
(1) a<f<i
(2)b<d, g<h, c<e;
(3)a+b+d+f= f+g+h+i= i+e+c+a= P
程序要求:输出所有满足上述条件的三角形的个数及图形。
这个题目我用穷举做会出现死循环,请问该怎么做?
回复列表 (共8个回复)
沙发
mo19880630 [专家分:420] 发布于 2005-09-27 12:38:00
用动态规划,不过当然有些难,就用高精度运算优化吧!!
板凳
huaipeizi [专家分:0] 发布于 2005-09-27 14:23:00
拜托各位。能不能把代码写出来
3 楼
huaipeizi [专家分:0] 发布于 2005-10-09 13:16:00
怎么没有人回啊?:((
4 楼
雨中客 [专家分:100] 发布于 2005-10-09 15:49:00
那个三角型是这样的吧
A
B C
D E
F G H I
这个题我以前作过 是个解答题 很就没看了记得不是清楚
我回去找找详细解答 看看能不能找出来
5 楼
ckl123 [专家分:90] 发布于 2005-10-09 18:16:00
var
n,i:word;
procedure print;
var
u:array[1..9]of boolean;
p,a,b,c,d,e,f,g,h,i:shortint;
begin
fillchar(u,sizeof(u),0);
read(p);
for a:=1 to 7 do begin
u[a]:=true;
for b:=1 to 8 do if not u[b] then begin
u[b]:=true;
for c:=1 to 8 do if not u[c] then begin
u[c]:=true;
for d:=b+1 to 9 do if not u[d] then begin
u[d]:=true;f:=p-a-b-d;
if (f>a) and (f<10) and not u[f] then begin
u[f]:=true;
for e:=c+1 to 9 do if not u[e] then begin
u[e]:=true;i:=p-a-c-e;
if (i>f) and (i<10) and not u[i] then begin
u[i]:=true;
for g:=1 to 8 do if not u[g] then begin
u[g]:=true;h:=p-f-g-i;
if (h>g) and (h<10) and not u[h] then begin
writeln(a);
writeln(b,' ',c);
writeln(d,' ',e);
writeln(f,' ',g,' ',h,' ',i);
exit;
end;
u[g]:=false;
end;
u[i]:=false;
end;
u[e]:=false;
end;
u[f]:=false;
end;
u[d]:=false;
end;
u[c]:=false;
end;
u[b]:=false;
end;
u[a]:=false;
end;
end;
begin
read(n);
for i:=1 to n do
print;
end.
6 楼
ckl123 [专家分:90] 发布于 2005-10-09 18:17:00
这是tju里的1024题吧!
7 楼
feierinlove2005 [专家分:80] 发布于 2005-10-09 20:13:00
你的程序为什么就这么烂呢?
用穷举也能做,我真是佩服!
小弟我是用数学方法做的,有个通式我不太记得了
但可以不用高精度做!
8 楼
huaipeizi [专家分:0] 发布于 2005-10-13 14:50:00
用穷举不能做,运算时间太长,会出现死循环的
我来回复