http://acm.ustc.edu.cn/ustcoj/problem.php?id=1308
JAVA。堆栈此题,利用b数组记忆功能避免一个数在一个位置上被重复选中。
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner scanner=new Scanner(System.in);
int i,j,k,n;
n=scanner.nextInt();
boolean[] a=new boolean[15];
int[] b=new int[15];
for (i=1;i<=n;i++) a[i]=true;
j=1;
while (j>0)
{
if (j==(n+1))
{
for (k=1;k<=n;k++) System.out.print(b[k]);
System.out.println();
j--;
a[b[j]]=true;
}
else
{
for (k=b[j]+1;k<=n;k++)
if (a[k]==true)
{
b[j]=k;
a[k]=false;
j++;
break;
}
if (k>n)
{
j--;
b[j+1]=0;
a[b[j]]=true;
}
}
}
}
}