AcWing 823. 排列
原题链接
简单
作者:
MEthylene
,
2024-10-23 15:27:58
,
所有人可见
,
阅读 1
#include<stdio.h>
void swap(int *a,int *b){
int t=*a;
*a=*b;
*b=t;
}
void reverse(int a[],int start,int end){
for(int i=start;i<end;i++){
swap(&a[start],&a[end]);
start++;
end--;
}
}
int next(int a[],int n){
int i,j;
for(i=n-2;i>=0;i--){
if(a[i]<a[i+1]){
break;
}
}
if(i<0){
return 0;
}
for(j=n-1;j>i;j--){
if(a[j]>a[i]){
break;
}
}
swap(&a[i],&a[j]);
reverse(a,i+1,n-1);
return 1;
}
int main(){
int n;
int a[9];
scanf("%d",&n);
for(int i=0;i<n;i++){
a[i]=i+1;
printf("%d ",a[i]);
}
printf("\n");
while(next(a,n)){
for(int i=0;i<n;i++){
printf("%d ",a[i]);
if((i+1)%n==0){
printf("\n");
}
}
}
return 0;
}