北师大ACM新手指导第八题-全排列
如果你看懂了指导第七题上面的程序,请使用上面程序的方法,完成下面这道题目:
输入一个数N (0<N<8),输出由1~N这N个数字组成的全排列,按从小到大的顺序。
Input
输入 只有一个数字N (0<8)
Output
输出 由1~N这N个数字组成的全排列,按从小到大的顺序。
Sample Input
3
Sample Output
123
132
213
231
312
321
Hint
提示:可在上一个代码的基础上,用一个used[10]数组标记当前这个数字是否使用过。
在完成此题后,用同样的方法完成第1108题:Lotto
如果你能将此题和1108题完成,则说明你已基本掌握了这种枚举方法。
Source
Tang Qiao @ BNU
来源: https://www.bnuoj.com/bnuoj/problem_show.php?pid=4118
#include <cstdio>
#include <cstring>
char A[8];
void Q_P(int N,int Set)
{
if(N==Set) puts(A+1);
else
{
for(int i=1;i<=N;i++)
{
int flag=0;
for(int j=1;j<=Set;j++)
if(A[j]=='0'+i) {flag=1;break;}
if(flag) continue;
A[Set+1] = '0'+i;
Q_P(N,Set+1);
}
}
}
int main()
{
int N;
while(~scanf("%d",&N))
{
memset(A,0,sizeof(A));
Q_P(N,0);
}
return 0;
}