Extjs(界面组件)实践

  给出若干个位数字, 计算所有不重复组合.

  比如123, 那么就有123, 132, 213, 231, 312, 321. 六种组合.

 

  这个问题很久前就看过, 但是一直都没去关注(因为关注了也做不出来- -||). 就在今天, 我突然就想要解开这个题, 说干就干, 苦思冥想之后, 完全没有头绪. 在百度上搜索了一番之后, 终于在CSDN上找到了一模一样的问题. 解题方法相当繁琐.

解题代码:

 1 int main()
 2 {
 3     int Array[]  = {1, 2, 3, 4};
 4     size_t len = sizeof(Array);
 5         size_t len = 4;
 6     for (size_t i1 = 0; i1 != len; ++i1)
 7     {
 8     for (size_t i2 = 0; i2 != len; ++i2)
 9     {
10     if (i2 != i1)
11     {
12     for (size_t i3 = 0; i3 != len; ++i3)
13     {
14     if (i3 != i2 && i3 != i1)
15     {
16     for (size_t i4 = 0; i4 != len; ++i4)
17     {
18     if (i4 != i1 && i4 != i2 && i4 != i3)
19     {
20     cout << Array[i1] << " "
21         << Array[i2] << " "
22         << Array[i3] << " "
23         << Array[i4] << endl;
24     }
25     }
26     }
27     }
28     }
29     }
30     }  
31     return 0;
32 }

这个办法实在不方便, 4个数字4层循环, 当时发帖的作者也是寻求有没有递归的解法.

在我折腾了一个下午之后, 终于得到了相对满意的答案.

 

以下是递归算法:

 1 void fun4(queue<int> &Queue, const int bit, int *pResult, const int len)
 2 {
 3     if (bit != 0)
 4     {
 5         for (size_t i = 0; i != bit; ++i)
 6         {
 7             int num = Queue.front();
 8             Queue.pop();
 9             pResult[bit-1] = num;
10             if ( bit == 1)
11             {
12                 PrintArray(pResult, len);
13             }
14             fun4(Queue, bit-1, pResult, len);
15             Queue.push(num);
16         }
17     }
18 }
19 int main()
20 {
21         int Array[] = {1, 2, 3, 4};
22         queue<int> Queue;
23         for (size_t i = 0; i != sizeof(Array)/sizeof(int); ++i)
24         {
25             Queue.push(Array[i]);
26         }
27         int Result[4];
28         fun4(Queue, 4, Result, sizeof(Array)/sizeof(int));
29         return 0;
30 }

这个递归貌似也不必那4层循环快多少, 至少用起来就方便多了.

 

在下纯粹新手, 望各位高手多多赐教...^_^.

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。