2878 - 【设计型】第8章:数组 排列组合
将一组数字进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合成的三位数有 123、132、213、231、312、321。给定一个数字n,编程计算并输出这个n位数的所有的排列组合。
题目输入
1个数。
题目输出
输出所有的排列组合,每一种组合占一行。要求输出的数值从上到下是递增的。
输入/输出样例
题目输入
3
题目输出
123 132 213 231 312 321
C语言解答
#include <stdio.h> #include <stdlib.h> #define N 10 void perm(int*,int,int); int main() { int num[N+1],i,n; scanf("%d",&n); for(i = 1; i <= n; i++) num[i] = i; perm(num,1,n); return 0; } void perm(int* num,int i,int n) { int j, k, tmp; if(i < n) { for(j = i; j <= n; j++) { tmp = num[j]; // 旋转该区段最右边数字至最左边 for(k = j; k > i; k--) num[k] = num[k-1]; num[i] = tmp; perm(num,i+1,n); // 还原 for(k = i; k < j; k++) num[k] = num[k+1]; num[j] = tmp; } } else { // 显示此次排列 for(j = 1; j <= n; j++) printf("%d", num[j]); printf("\n"); } }