回 帖 发 新 帖 刷新版面

主题:请高手帮忙呀

把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个回复)

沙发

用动态规划,不过当然有些难,就用高精度运算优化吧!!

板凳

拜托各位。能不能把代码写出来

3 楼

怎么没有人回啊?:((

4 楼

那个三角型是这样的吧
        A
      B   C
   D        E
F    G   H    I
这个题我以前作过  是个解答题   很就没看了记得不是清楚
我回去找找详细解答 看看能不能找出来

5 楼

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 楼

这是tju里的1024题吧!

7 楼

你的程序为什么就这么烂呢?
用穷举也能做,我真是佩服!
小弟我是用数学方法做的,有个通式我不太记得了
但可以不用高精度做!

8 楼

用穷举不能做,运算时间太长,会出现死循环的

我来回复

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