4 solutions

  • 2
    @ 2024-8-2 15:43:28

    包对的

    #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
      @ 2024-7-12 11:27:31
      #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
        @ 2024-7-13 14:09:17
        #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
          @ 2024-7-12 11:35:35
          #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