题目描述
排列与组合是常用的数学方法。
先给一个正整数 ( 1 < = n < = 10 )
例如n=3,所有组合,并且按字典序输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
输入
输入一个整数n( 1<=n<=10)
输出
输出所有全排列
每个全排列一行,相邻两个数用空格隔开(最后一个数后面没有空格)
样例输入
3
样例输出
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 这是对昨天学习《算法竞赛入门经典》的复习,应用了7.2.1生成1~n的排列 递归方法。
#include<stdio.h> int a[1000],n; void Get_a(int n,int *a,int ans) { int flag,i,j; if( ans == n+1) { for(i = 1; i < n; i ++) printf("%d ",a[i]); printf("%d\n",a[n]); } else { for(i = 1; i <= n; i ++) { flag = 1; for(j = 1; j < ans; j ++) if(a[j] == i) flag = 0; if(flag) { a[ans] = i; Get_a(n,a,ans+1); } } } return; } int main() { while(scanf("%d",&n)!=EOF) { Get_a(n,a,1); } return 0; }
时间: 2024-10-07 15:51:13