2
3 1
4 2
1
2
3
12
13
14
21
23
24
31
32
34
41
42
43
#include<cstdio>
#define MAX 20
using namespace std;
int main(int argc,char *argv[])
{
int count;
int m,n;
int flag;
int i,j;
int A[MAX];
scanf("%d",&count);
while(count--)
{
scanf("%d%d",&n,&m);
i=1;
A[i]=1;
while(1)
{
flag=1;
for(j=1;j<i;j++)//检查有没有生成重复的元素
{
if(A[j]==A[i])
{
flag=0;
break;
}
}
if(flag&&i==m)//打印排列
{
for(j=1;j<=m;j++)
printf("%d",A[j]);
printf("\n");
}
if(flag&&i<m)//个数小于M,继续生成数,初始为1
{
i++;
A[i]=1;
continue;
}
while(A[i]==n)//已达到最大值,回溯到上一个元素
i--;
if(i>0)//尝试下一个值
A[i]++;
else
break;
}
}
return 0;
}
原文:http://blog.csdn.net/cstopcoder/article/details/21245359