6 solutions

  • 6
    @ 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
      @ 2025-11-24 13:49:41
      #include<bits/stdc++.h>
      using namespace std;
      int main()
      {
      	int n;
      	cin>>n;
      	vector<int> v;
      	for(int i=1;i<=n;i++) v.push_back(i);
      	do{
      		for(auto x:v) cout<<x<<" ";
      		cout<<endl;
      	}while(next_permutation(v.begin(),v.end()));
      	return 0;
      }
      
      
      • 0
        @ 2026-2-23 20:48:13
        #include<bits/stdc++.h>
        using namespace std;
        int main()
        {
        	int a[5]={0,1,2,3,4}; //初始化 
        	int n=4;
        	do{
        		for(int i=1;i<=n;i++)
        		{
        			cout<<a[i]<<" "; 
        		}
        		cout<<endl;
        	}while(next_permutation(a+1,a+n+1)); //得到a[1]到a[n]的下一个排列 
        	return 0;
        }
        
        
        • -4
          @ 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;
            }
            
            • -4
              @ 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;
              }
              
              • 1

              Information

              ID
              191
              Time
              1000ms
              Memory
              256MiB
              Difficulty
              3
              Tags
              # Submissions
              86
              Accepted
              22
              Uploaded By