题目描述
假设有n个元素依次进栈,给出他们不同的出栈情况。输入n与元素。
输入
3
1 2 3
输出
1 2 3
1 3 2
3 2 1
2 1 3
2 3 1
样例输入
2
1 2
样例输出
1 2
2 1
参考代码
#include<stdio.h>
#include<string.h>
char tmp[10];
int n;
void f(int pos,int len,char s[])
{
int i,j,t=0;
char c[10];
if(len==strlen(s)-1)
{
t=len-1;
tmp[pos]=s[len];
for (j=1;j<len+1;j++)
{
tmp[pos+j]=s[t];
t--;
}
for (i=0;i<n-1;i++)
printf("%c ",tmp[i]);
printf("%cn",tmp[i]);
return;
}
tmp[pos]=s[len];
memset(c,0,sizeof(c));
for(i=0;i<strlen(s);i++)
{
if(i!=len)
{
c[t]=s[i];
t++;
}
}
if(len>0)
len--;
for(i=len;i<strlen(c);i++)
{
f(pos+1,i,c);
}
return;
}
int main()
{
int i=0;
char s[10];
memset(s,0,sizeof(s));
scanf("%d",&n);
for(i=0;i<n;i++)
s[i]=i+'1';
for(i=0;i<n;i++)
f(0,i,s);
return 0;
}
解析
暂无