A,B,C各有若干学生,现在各选一个学生去参加活动,求所有的可能;比如:
A(A1,A2,A3)
B(B1,B2)
C(C1,C2)
结果应该是:
1,A1,B1,C1
2,A1,B1,C2
3,A1,B2,C1
…………
n,A3,B2,C2

解决方案 »

  1.   

    for i:= Low(A) to High(A) do
    for j:= Low(B) to High(B) do
    for k:= Low(C) to High(C) do
    writeln(IntToStr(i*Length(j) * Length(k) + j*Length(k) + k +1)  + ',' + A[i] + ',' + B[j] + ',' + C[k]);
      

  2.   

    噢,搞懂了,谢谢,我还用一个很复杂的方法历遍来实现呢。  for i :=1 to 3 do
       begin
         n=n+ a[1,b[i]] ;
         
           if b[i]=high then
            begin
              b[i] = 0 ;
              b[i-1]=b[i-1] +1;
            end
            else
            begin
             b[i]=b[i]+1 ; 
             end ;
    谢谢,顺便问一下,如果有20个城市或者100个城市,可有更简单的方法实现?
      

  3.   

    用二维数组即可
    var
      A:array of array of string;
      P:array of integer;
      b:boolean;
      i:integer;
    begin
      SetLength(P,Length(A));
      for i:=0 to High(P) do
        P[i] := 0;  while true do
      begin
        for i:=Low(A) to High(A) do
          write(A[i][P[i]]);    b := false;
        for i:=Low(A) to High(A) do
        begin
          if P[i]<High(A[i]) then
            b := true;
        end;    if not b then
          break;
        writeln;    i:=High(A);
        while i>=0 do
        begin
          if P[i] <High(A[i]) then
          begin
            inc(P[i]);
            break;
          end
          else begin
            P[i] := 0;
            dec(i);
          end;
        end;
      end;
      readln;
    end.你的三十分真难拿……下次不回答这种算法题目了……-_-