- 一、题目描述
- 二、解题思路
- 三、解题代码
- 四、写在最后
二、解题思路没有输入,按照字典序输出所有1,2,3,4,5的全排列
- 我们看到这个1到5的排列,就会马上想到五层for循环
- 但是这样是不够的。因为只是五层for循环的话,那么就会出现类似1,2,3,4,1这种情况,那么就不符合题意了。因为全排列中的序列是不可以重复的。
- 当我们枚举了一个数字的时候,我们可以使用标记数组来标记这个数字,当我们进行下一层的循环的时候,那么就可判断标记,从而避免重复。
#include#include const int N = 5; int h[N]; int main() { int count = 0; memset(h,0,5); int i, j, k, l, m; for(i = 1; i <= N; ++i) { h[i] = 1; for(j = 1; j <= N; ++j) { if (h[j]) { continue; } h[j] = 1; for(k = 1; k <= N; ++k) { if (h[k]) { continue; } h[k] = 1; for(l = 1; l <= N; ++l) { if (h[l]) { continue; } h[l] = 1; for(m = 1; m <= N; ++m) { if (h[m]) { continue; } printf("%d%d%d%d%dn",i,j,k,l,m); count++; } h[l] = 0; } h[k] = 0; } h[j] = 0; } h[i] = 0; } printf("%dn",count); return 0; }
- 这里的count用于计数,表示全排列共有多少种。
要是还不理解可以在文章下面评论留言或者私信作者。
该文章内容是我阅读了CSDN博主英雄哪里出来的博文后,自己记录的一些观点和想法,希望对大家有帮助。英雄哪里出来的对应博文地址:传送门
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)