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层循环快多少, 至少用起来就方便多了.
在下纯粹新手, 望各位高手多多赐教...^_^.
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。