题目大意:输入一个字符串。输出它的下一个字典序排列。

字典序算法思想:

1.从右向左寻找字符串找出第一个a[i]<a[i+1]的位置i;

2.从右向左找出第一个大于a[i]的元素a[j];

3.swap(a[i],a[j])

4.将a[i+1]......到a[stelen(a)]倒序

5.输出a

代码例如以下:

#include<iostream>
#include<cstdio>
#include <cstring>
#include<algorithm>
#include<cstdlib>
using namespace std; inline void swap(int &a,int &b){
int temp;
temp=a;
a=b;
b=temp;
} void Print(int a[],int n){
for(int i=1;i<=n;i++){
printf("%c",a[i]+'0');
if(i==n) cout<<"\n";
}
return ;
} int main(){ int Dire[100],q;
char a[100];
int r,l,n,t;
int count=0,c=1;
while(scanf("%s",a)&&strcmp(a,"#")!=0){
n=strlen(a);//求出字符串的长度
for(int i=1;i<=n;i++){//初始化待排列的数字串
Dire[i]=a[i-1]-'0';
}
int i=n-1;
l=0;
while(i>0){
if(Dire[i]<Dire[i+1]){//找到Dire[i]<Dire[i+1]
l=i;
break;
}
else{
i--;
}
}
if(l){ //存在兴许排列
for(int j=n;j>l;j--){
if(Dire[j]>Dire[l]){ //从右向左找到第一个Dire[j]>Dire[i]
r=j;
break; //找到第一个Dire[j]时。即跳出循环
}
}
swap(Dire[l],Dire[r]); //交换Dire[j]>Dire[i]
for(int p=l+1,q=n;p<q;p++,q--)//倒序
swap(Dire[p],Dire[q]);
Print(Dire,n);
}
else{
cout<<"No Successor"<<endl;
}
}
return 0;
}

ACM POJ 1146 ID Codes的更多相关文章

  1. poj 1146 ID Codes (字符串处理 生成排列组合 生成当前串的下一个字典序排列 【*模板】 )

    ID Codes Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6229   Accepted: 3737 Descript ...

  2. POJ 1146 ID Codes 用字典序思想生成下一个排列组合

    ID Codes Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7644   Accepted: 4509 Descript ...

  3. POJ 1146 ID Codes (UVA146)

    // 求下一个排列// 如果已经是最后一个排列// 就输出 No Successor// stl 或 自己写个 生成排列 我测试了下 两个速率是一样的.只是代码长度不同 /* #include < ...

  4. (组合数学3.1.1.1)POJ 1146 ID Codes(字典序法)

    /* * POJ_1146.cpp * * Created on: 2013年10月8日 * Author: Administrator */ #include <iostream> #i ...

  5. 1146 ID Codes

    题目链接: http://poj.org/problem?id=1146 题意: 给定一个字符串(长度不超过50), 求这个字符串的下一个字典序的字符串, 如果已经是最大字典序, 那么输出 " ...

  6. 【水一发next_permutation】poj 1146——ID Codesm

    来源:点击打开链接 求字典序下一位,没有直接输出没有.全排列函数秒水过. #include <iostream> #include <algorithm> #include & ...

  7. POJ 1146:ID Codes

    ID Codes Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6281 Accepted: 3769 Description ...

  8. uva146 ID codes

    Description It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In or ...

  9. Brute Force & STL --- UVA 146 ID Codes

     ID Codes  Problem's Link:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&a ...

随机推荐

  1. 使用 satis 搭建 composer 本地仓库

    环境 windows nginx php composer 安装 拉取 satis 项目包,并拉取项目依赖 composer create-project composer/satis --stabi ...

  2. C#窗体间的跳转传值

    1.开发平台VS2012 2.需求:从一个窗体跳转到另一个窗体,并传递参数,接收返回值. 3.案列如图: 4.代码如下: 登陆窗体: //当点击注册按钮 private void button2_Cl ...

  3. 数据库范式1NF 2NF 3NF BCNF(实例)通俗易懂的讲解

    [转] 数据库范式1NF 2NF 3NF BCNF(实例)通俗易懂的讲解     本文对大多数初学数据库原理的同学绝对是个大福利,哈哈,完完整整的看完此篇博文一定能够清晰地理解数据库的四大范式.    ...

  4. HDU 4089

    很容易列出方程 设dp[i][j]为排在第i位置,总共有j个人排队到达目标状态的概率 i=1 dp[i][j]=p4+p1*dp[i][j]+p2*dp[j][j] 2<=i<=k dp[ ...

  5. 随心所欲生成git仓库随意一段commit的专用patch应用小实践

     随心所欲生成git仓库随意一段commit的专用patch应用小实践 我们在开发中.时不时的可能要去做一个patch给你的下线,或者你的合作者.在git管理中,我们知道有git format-pat ...

  6. 终结者:负载均衡之Nginx(一)

            相信非常多人都听过Nginx.这个小巧的东西能够和Apache及IIS相媲美.那么它有什么作用呢?一句话.它是一个减轻Web应用server(如Tomcat)压力和实现Web应用ser ...

  7. Binary Tree Inorder Traversal--leetcode

    原题链接:https://oj.leetcode.com/problems/binary-tree-inorder-traversal/ 题目大意:中序遍历二叉树 解题思路:中序遍历二叉树.中序遍历二 ...

  8. UVALive 4222 /HDU 2961 Dance 大模拟

    Dance Problem Description For a dance to be proper in the Altered Culture of Machinema, it must abid ...

  9. Objective-c 中如何重写父类的初始化方法

    在我们的日常开发中我们经常会定义一些自己的子类继承一些UIKit 库中的类,那我们应该如何重写的这些初化方法呢?那我们先看看这些类有哪些初初化方法吧.(这里就用UIView为例) - (id)init ...

  10. Linux系统安装Redis数据库

    Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...