2878 - 【设计型】第8章:数组 排列组合

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 2 MB

将一组数字进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合成的三位数有 123132213231312321。给定一个数字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");      
	}  
}