4 solutions
-
2
包对的
#include<bits/stdc++.h> using namespace std; int a[20]; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { a[i]=i; cout<<i<<" "; } cout<<endl; while(1) { int k=n; while(k-1>=1&&a[k-1]>a[k]) { k--; } if(k==1) { break; } k--; int t=n; while(a[k]>a[t]) { t--; } swap(a[k],a[t]); reverse(a+k+1,a+n+1); for(int i=1;i<=n;i++) { cout<<a[i]<<" "; } cout<<endl; } return 0; }
-
-1
#include<bits/stdc++.h> using namespace std; const int N=20; int a[N]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) a[i]=i; for(int i=1;i<=n;i++) printf("%d ",a[i]); printf("\n"); while(true) { int k=n; while(k-1>=1&&a[k-1]>a[k]) k--; if(k-1==0) break; k=k-1; int t=n; while(a[k]>a[t]) t--; swap(a[k],a[t]); reverse(a+k+1,a+n+1); for(int i=1;i<=n;i++) { printf("%d ",a[i]); } printf("\n"); } return 0; }
-
-3
#include<bits/stdc++.h> using namespace std; const int N=20; int a[N]; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { a[i]=i; } for(int i=1;i<=n;i++) { cout<<a[i]<<" "; } cout<<endl; while(true) { int k=n; while(k-1>=1&&a[k-1]>a[k]) //找到下降的位置 { k--; } if(k==1) //越界 { break; } k=k-1; //下降的位置 int t=n; //从后找到第一个大于它的元素 while(a[k]>a[t]) //小于就一直累加 { t--; } swap(a[k],a[t]); //和最后一个比它大的交换 reverse(a+k+1,a+n+1); //逆序 for(int i=1;i<=n;i++) { cout<<a[i]<<" "; } cout<<endl; } return 0; }
-
-4
#include<bits/stdc++.h> using namespace std; const int N=20; int a[N]; int main() { int n; scanf("%d",&n); for(int i=i;i<=n;i++)a[i]=i; for(int i=1;i<=n;i++)printf("%d ",a[i]); printf("\n"); while(true) { int k=n; while(k-1>=1&&a[k-1]>a[k]) k--; if(k-1==0)break; k=k-1; int t=n; while(a[k]>a[t])t--; swap(a[k],a[t]); reverse(a+k+1,a+n+1); for(int i=1;i<=n;i++) { printf("%d ",a[i]); } printf("\n"); } return 0; }
- 1
Information
- ID
- 191
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 3
- Tags
- # Submissions
- 67
- Accepted
- 14
- Uploaded By