【问题定义】 
1. item=n; (n >= 1 AND n <= 65535)
2. item.length = m; (m >= 1 AND m <= 65535)【规范】
1. item.length 大于等于1的前提下成立。
2. 集合顺序位置不能改变。如 A + B + C = E(正确),不能是 A + C + B = E(错误)【结果】
求集合N(A,B,C ... M) 所有不重复的组合结果。【附加】
以最快的速度和计算时间组合完毕。最好用C#代码编写。【定义示例】
集合A = {"Windows XP","Windows 2003", "Windows 7"}
集合B = {"注销", "关机", "重启", "结束进程"}
集合C = {"方法?", "步骤?", "如何操作?"}【结果示例】
1. windows Xp注销方法?
2. windows Xp关机方法?
3. windows Xp重启方法?
4. windows Xp结束进程方法?5. windows Xp注销步骤?
6. windows Xp关机步骤?
7. windows Xp重启步骤?
8. windows Xp结束进程步骤?.............N-1. windows 7结束进程步骤?
N.   windows 7结束进程如何操作?=================================================================================

解决方案 »

  1.   

    我OUT了...看不懂意思..期待牛人解答..
      

  2.   


    三层循环绝对不行,我试过了。因为每一层的Length长度不一样。并且组合顺序不能颠倒。并且每一层貌似都是独立了。。没逻辑了。。
      

  3.   


    “笛卡尔积”直逼问题要害。确实是个笛卡尔积的问题。从这里看到了定义:“笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。”引用:http://baike.baidu.com/view/348542.htm如何才能把高深的数学公式转换成代码呢?思考中期待楼下牛人。
      

  4.   

    lz试试递归吧,递归到最后一层输出结果就可以Search(int arrayIndex, string cString)
    {
    if(arrayIndex == array.Length)
    {
    Console.WriteLine(cString);
    return;
    }
    foreach(var item in array[arrayIndex])
    Search(arrayIndex + 1, cString + item);
    }
      

  5.   

    正好发了个帖...
    http://topic.csdn.net/u/20110610/13/d1924231-0a45-4826-ac2a-7bbcfcb9fc93.html
      

  6.   

    http://topic.csdn.net/u/20110610/13/d1924231-0a45-4826-ac2a-7bbcfcb9fc93.html这个帖子里有算笛卡尔积的,lz看看吧!
      

  7.   

    参考这里的算法完成:
    http://topic.csdn.net/u/20110610/13/D1924231-0A45-4826-AC2A-7BBCFCB9FC93.html运行结果已经跟帖在LZ后边。