排列

给定一个正整数n,1,2,...,n的全排列有n!种,按字典序从小到大,对于任意一个排列,给出它的下一个排列。如n=3,123的下一个排列为132。

代码:

#include<stdio.h>
#include<iostream>
using namespace std;

int n;

int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        int a, b, i, j, k;
        char num[12];
        scanf("%s",num);
        int tmp[12];
        j=0;
        for(i=n-1; i>0; --i)
        {
            a = num[i] - '0';
            b = num[i-1] - '0';
            if(a<b)
                tmp[j++] = num[i]-'0';
            else
                break;
        }
        tmp[j]=num[i]-'0';
        int max = tmp[j];
        int id=j;
        for(k=j-1; k>=0; --k)
        {
            if(tmp[k]>num[i-1]-'0')
            {
                if(tmp[k]<max)
                    max = tmp[k], id = k;
            }
            else
                break;
        }
        tmp[id] = num[i-1]-'0';
        num[i-1] = max+'0';
        for( k=0; k<=j; ++k)
            num[i++] = tmp[k]+'0';
        for(i=0; i<n; i++)
            printf("%c",num[i]);
        printf(" ");
    }
    return 0;
}



只有自己可以帮助自己
原文地址:https://www.cnblogs.com/lemonhanyu/p/5304665.html