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

字典序算法思想:

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

代码例如以下:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include <cstring>
  4. #include<algorithm>
  5. #include<cstdlib>
  6. using namespace std;
  7.  
  8. inline void swap(int &a,int &b){
  9. int temp;
  10. temp=a;
  11. a=b;
  12. b=temp;
  13. }
  14.  
  15. void Print(int a[],int n){
  16. for(int i=1;i<=n;i++){
  17. printf("%c",a[i]+'0');
  18. if(i==n) cout<<"\n";
  19. }
  20. return ;
  21. }
  22.  
  23. int main(){
  24.  
  25. int Dire[100],q;
  26. char a[100];
  27. int r,l,n,t;
  28. int count=0,c=1;
  29. while(scanf("%s",a)&&strcmp(a,"#")!=0){
  30. n=strlen(a);//求出字符串的长度
  31. for(int i=1;i<=n;i++){//初始化待排列的数字串
  32. Dire[i]=a[i-1]-'0';
  33. }
  34. int i=n-1;
  35. l=0;
  36. while(i>0){
  37. if(Dire[i]<Dire[i+1]){//找到Dire[i]<Dire[i+1]
  38. l=i;
  39. break;
  40. }
  41. else{
  42. i--;
  43. }
  44. }
  45. if(l){ //存在兴许排列
  46. for(int j=n;j>l;j--){
  47. if(Dire[j]>Dire[l]){ //从右向左找到第一个Dire[j]>Dire[i]
  48. r=j;
  49. break; //找到第一个Dire[j]时。即跳出循环
  50. }
  51. }
  52. swap(Dire[l],Dire[r]); //交换Dire[j]>Dire[i]
  53. for(int p=l+1,q=n;p<q;p++,q--)//倒序
  54. swap(Dire[p],Dire[q]);
  55. Print(Dire,n);
  56. }
  57. else{
  58. cout<<"No Successor"<<endl;
  59. }
  60. }
  61. return 0;
  62. }

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. Proxifier安装与使用

    Proxifier安装与使用 1.Proxifier官网可能打不开,这是一个下载地址,提取码为p1l8. 用户名随意填 注册码下边 5EZ8G-C3WL5-B56YG-SCXM9-6QZAP G3ZC ...

  2. Swoole WebSoctet 使用 zlib 压缩之 PHP 与 pako.js

    一些理论知识 先说一下deflate算法吧,deflate是zip压缩文件的默认算法, 其实deflate现在不光用在zip文件中, 在7z, xz等其他的压缩文件中都用, 实际上deflate只是一 ...

  3. Python学习笔记(6)元组

    2019-03-02 元组(tuple): (1)元组是不可变的,无法进行任意修改.插入.删除一个元素. (2)创建元组大部分时候用小括号,如果创建的元组中只有一个元素,需要在它的后面加上一个逗号. ...

  4. 小学生都能学会的python(字典{ })

    小学生都能学会的python(字典{ }) 1. 什么是字典 dict. 以{}表示. 每一项用逗号隔开, 内部元素用key:value的形式来保存数据 {"jj":"林 ...

  5. GitHub上搭建私人hexo博客操作教程

    GitHub上搭建hexo博客 安装GitGit:主要用于上传博客页面到github和命令操作安装NodeNode.js:Hexo的运行环境安装HexoHexo:博客程序打开安装Git后的生成的右键菜 ...

  6. C/s模式与B/S模式

    C/S模式事是client/server,即客服端/服务模式

  7. [using_microsoft_infopath_2010]Chapter3 表单设计基础:使用InfoPath布局,控件,和视图

    本章概要 1.使用InfoPath的布局工具构建吸引人的表单 2.使用InfoPath表格工具 3.在表单上添加字段和控件 4.使用section和container组织表单里的控件 5.在一个表单上 ...

  8. iOS 从各种效果图颜色标注生成 UIColor

    iOS 从各种效果图颜色标注生成 UIColor 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公 ...

  9. JavaScript事件驱动机制&amp;定时器机制

    在浏览器中,事件作为一个极为重要的机制,给予JavaScript响应用户操作与DOM变化的能力.在NodeJS中.异步事件驱动模型则是提高并发能力的基础. 一.程序怎样响应事件 程序响应外部的事件有两 ...

  10. iOS中respondsToSelector与conformsToProtocol的相关理解和使用

    respondsToSelector相关的方法 : -(BOOL) isKindOfClass: classObj 用来判断是否是某个类或其子类的实例 -(BOOL) isMemberOfClass: ...