突然发现不用递归
查看原帖
突然发现不用递归
1330630
jinzhongqic2905楼主2025/7/25 08:41
#include<iostream>
using namespace std;
int n;
int a[20];
int np()
{
	int sum=1;
	for(int i=2;i<=n;i++)
	{
		sum*=i;
	}
	return sum;
}
void change(int a[],int len)
{
	for(int i=0;i<len/2;i++)
	{
		swap(a[i],a[len-i-1]);
	}
}
void next()
{
	int pos=n;
	while(a[pos]>a[pos+1])
	{
		pos--;
	}
	int p;
	for(int i=n;i>pos;i--)
	{
		if(a[i]>a[pos])
		{
			p=i;
			break;
		}
	}
	swap(a[p],a[pos]);
	change(a+pos+1,n-pos);
}
int main()
{
	cin>>n;
	int maxn=np();
	for(int i=1;i<=n;i++)
	{
		a[i]=i;
	}
	for(int i=1;i<=maxn;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<"    "<<a[j];
		}
		cout<<endl;
		next();
	}
	return 0;
}
2025/7/25 08:41
加载中...