求一算法,急!!!!!!(100分)

J

Johnqiu

Unregistered / Unconfirmed
GUEST, unregistred user!
有一N*3的矩阵,如3*3的矩阵
如下面的方法乘
[1,1]*[2,1]*[3,1]
...............
就是[1,x]*[2,y]*[3,z]
就是从每一行中取一个数来相乘
但是不能重复,就是说不能出现如:[1,1]*[2,1]*[3,1]不能出现两次
这个算法怎么实现啊???
 
最苯的办法,把你取过的都记起来[:D]
 
...
for i:=1 to Ndo
for j:=1 to Ndo
for k:=1 to Ndo
B[i,j,k]:=A[i,1]*A[j,2]*A[k,3];
...
给分!
 
那样请问“秀” [1,1]*[2,1]*.....[n,1]怎么样出现呢???
 
如果要扩展到n个得话,用递归。
 
什么叫不能重复?
 
搞定! :)
type
IA=array of Integer;
IA3=array of array[0..2] of Integer;
function CalN3(a:IA3):IA;
var
N,Size,i,c:Integer;
procedure Cal(Level,S:Integer);
var
j:Integer;
begin
if Level>0 then
begin
for j:=0 to 2do
Cal(Level-1,S*a[Level,j]);
end
else
begin
for j:=0 to 2do
begin
Result[c]:=S*a[0,j];
Inc(c);
end;
end;
end;
begin
N:=High(a)+1;
Size:=1;
for i:=1 to Ndo
Size:=Size*3;
SetLength(Result,Size);
c:=0;
Cal(N-1,1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
a:IA3;
r:IA;
i,j:Integer;
begin
SetLength(a,2);
for i:=0 to 1do
for j:=0 to 2do
a[i,j]:=i*3+j+1;
r:=CalN3(a);
for i:=0 to High(r)do
Memo1.Lines.Add(IntToStr(r));
end;
 
> 就是从每一行中取一个数来相乘
> [1,1]*[2,1]*[3,1]
下面说是每列取一个数字来相乘,矛盾! : (
 
如果随机取:
var n,i,j,temp:byte;eve:array[1..{n的最大值},3]of boolen;
dat:array[1..{n的最大值},3]of integer;
out:array[1..{n的最大值}]of integer;
begin
{得到n dat}
for i:=1 to ndo
out:=1;
for i:=1 to ndo
for j:=1 to 3do
eve[i,j]:=true;
randomize();
for i:=1 to ndo
for j:=1 to 3do
begin
repeat
temp:=random(n)
until temp;
out:=out*dat[temp,j];
end;
end.
 
[:)][:D][8D][:(][:(!][^][?]
 
接受答案了.
 
顶部