多个数组(数组个数不定),每个数组中有几个数字,从各个数组中各抽一个数字出来,可以形成一个排列,需要输出所有排列的可能:比如,
数组一:1,2
数组二:1,2
数组三:1
数组四:1,2,3所有可能是 2*2*1*3=12输出是:1,1,1,1
2,1,1,1
1,2,1,1
2,2,1,1
1,1,1,2
2,1,1,2
1,2,1,2
2,2,1,2
1,1,1,3
2,1,1,3
1,2,1,3
2,2,1,3求列出这种输出的思路--------------------跟数据库中多个表没有条件的连接是一样的,如
表A中有两行,1,2
表B中有两行,1,2
表C中有一行,1
表D中有三行,1,2,3select A.a , B.b , C.c , D.d
from A,B,C,D//没有where条件就是这种输出.

解决方案 »

  1.   

    不就是4次循环么?
    int a[2] = {1, 2};
    int b[2] = {1, 2};
    int c[1] = {1};
    int d[3] = {1, 2, 3};for (int i = 0; i < 2; i ++) {
    for (int j = 0; j < 2; j ++) {
    for (int k = 0; k < 1; k ++) {
    for (int l = 0; l < 3; l ++) {
    print("%d,%d,%d,%d", a[i], b[j], c[k], d[l]);
    }
    }
    }
    }
      

  2.   


    我用的办法比较笨,因为对效率要求很低。用一个StringArray 存放结果。StringArray lc;
    先存入第一个数组中的内容lc.Add("1");
    lc.Add("2");for (i = 1/*这里是1不是0*/;i<数组个数;i++){
         for (j = 1/*同样是1*/;j<数组[i]的元素个数;j++){}
      

  3.   

    SORRY,没打完就按了提交。StringArray lc;//用于输出
    先存入第一个数组中的内容lc.Add("1");
    lc.Add("2");long ll_copys;
    for (i = 1/*这里是1不是0*/;i<数组个数;i++){
        ll_copys = lc.GetSize();
        for (j = 1/*同样是1*/;j<数组[i]的元素个数;j++){
            原样复制前ll_copys个原素到lc的后面
        }    //假定只有两个数组    //{1,2}
        //{1,2,3}    做完上面这一步
        lc中有6个元素
        "1"
        "2"
        "1"
        "2"
        "1"
        "2"    跟着在这6个元素上各加上第二个数组中的内容,变成
        "11"
        "21"
        "12"
        "22"
        "13"
        "23"    }