• 排列


    给定一个正整数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;
    }



    只有自己可以帮助自己
  • 相关阅读:
    什么是系统瓶颈?
    功能测试之链接测试
    H5页面测试要点
    面向对象编程
    Java 基本语法(1)
    Java语言概述
    Annotation注解(有源代码)
    枚举类专题(有源代码)
    JDBC专题
    JSP专题
  • 原文地址:https://www.cnblogs.com/lemonhanyu/p/5304665.html
Copyright © 2020-2023  润新知