zoukankan      html  css  js  c++  java
  • 排列

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



    只有自己可以帮助自己
  • 相关阅读:
    java的hashcode和equals
    Spring 注入所得
    Action注入错误
    oracle中的替换函数replace和translate函数
    CSS div水平垂直居中和div置于底部
    java double类型保留两位小数4种方法
    Delphi写的DLL回调C#
    Java基础进阶整理
    j技术方案
    SetForegroundWindow激活窗口
  • 原文地址:https://www.cnblogs.com/lemonhanyu/p/5304665.html
Copyright © 2011-2022 走看看