一道编程题(pascal)

来源:百度知道 编辑:UC知道 时间:2024/05/18 20:37:54
把数码1,2,3,4……9分成3组,
每组构成一个3位数,使这3个3位数恰好成1:2:3(就是2倍和3倍),该怎样分?求出所有的解答来。
明天早上就要``很急的```用pascal语言来编
谢谢了!
我程度不是很高```所以编的时候最好能在case语句到循环语句之间这个水平``

深度优先搜索+优化就行了啊
下面是不优化的
prgram cx;
var
a,b,c:integer;
used:array[1..9]of boolean;
num:array[1..9]of byte;
procedure print;
begin
writeln(a);
writeln(b);
writeln(c);
end;
procedure try(n:integer);
var
i:byte;
begin
if (n>9) and (a/b=1/2) and (a/c=1/3) and (b/c=2/3) then print
else if (n<=9) then
for i:=1 to 9 do
if used[i]=false then
begin
num[n]:=i;
used[i]:=true;
a:=num[1]*100+num[2]*10+num[3];
b:=num[4]*100+num[5]*10+num[6];
c:=num[7]*100+num[8]*10+num[9];
try(n+1);
used[i]:=false;
end;
end;
begin
fillchar(used,sizeof(used),false);
fillchar(num,sizeof(num),0);
try(1);
end.

//大概这样吧,你在自己改下

我的程序,另一种思路,不知你能不能看懂.
program cx;
var
i,b:integer;
a:array[1..3]of integer;
used:array[1..9]of boolean;