ACM POJ 1146 ID Codes
题目大意:输入一个字符串。输出它的下一个字典序排列。
字典序算法思想:
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的更多相关文章
- poj 1146 ID Codes (字符串处理 生成排列组合 生成当前串的下一个字典序排列 【*模板】 )
ID Codes Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6229 Accepted: 3737 Descript ...
- POJ 1146 ID Codes 用字典序思想生成下一个排列组合
ID Codes Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7644 Accepted: 4509 Descript ...
- POJ 1146 ID Codes (UVA146)
// 求下一个排列// 如果已经是最后一个排列// 就输出 No Successor// stl 或 自己写个 生成排列 我测试了下 两个速率是一样的.只是代码长度不同 /* #include < ...
- (组合数学3.1.1.1)POJ 1146 ID Codes(字典序法)
/* * POJ_1146.cpp * * Created on: 2013年10月8日 * Author: Administrator */ #include <iostream> #i ...
- 1146 ID Codes
题目链接: http://poj.org/problem?id=1146 题意: 给定一个字符串(长度不超过50), 求这个字符串的下一个字典序的字符串, 如果已经是最大字典序, 那么输出 " ...
- 【水一发next_permutation】poj 1146——ID Codesm
来源:点击打开链接 求字典序下一位,没有直接输出没有.全排列函数秒水过. #include <iostream> #include <algorithm> #include & ...
- POJ 1146:ID Codes
ID Codes Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6281 Accepted: 3769 Description ...
- uva146 ID codes
Description It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In or ...
- Brute Force & STL --- UVA 146 ID Codes
ID Codes Problem's Link:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&a ...
随机推荐
- Proxifier安装与使用
Proxifier安装与使用 1.Proxifier官网可能打不开,这是一个下载地址,提取码为p1l8. 用户名随意填 注册码下边 5EZ8G-C3WL5-B56YG-SCXM9-6QZAP G3ZC ...
- Swoole WebSoctet 使用 zlib 压缩之 PHP 与 pako.js
一些理论知识 先说一下deflate算法吧,deflate是zip压缩文件的默认算法, 其实deflate现在不光用在zip文件中, 在7z, xz等其他的压缩文件中都用, 实际上deflate只是一 ...
- Python学习笔记(6)元组
2019-03-02 元组(tuple): (1)元组是不可变的,无法进行任意修改.插入.删除一个元素. (2)创建元组大部分时候用小括号,如果创建的元组中只有一个元素,需要在它的后面加上一个逗号. ...
- 小学生都能学会的python(字典{ })
小学生都能学会的python(字典{ }) 1. 什么是字典 dict. 以{}表示. 每一项用逗号隔开, 内部元素用key:value的形式来保存数据 {"jj":"林 ...
- GitHub上搭建私人hexo博客操作教程
GitHub上搭建hexo博客 安装GitGit:主要用于上传博客页面到github和命令操作安装NodeNode.js:Hexo的运行环境安装HexoHexo:博客程序打开安装Git后的生成的右键菜 ...
- C/s模式与B/S模式
C/S模式事是client/server,即客服端/服务模式
- [using_microsoft_infopath_2010]Chapter3 表单设计基础:使用InfoPath布局,控件,和视图
本章概要 1.使用InfoPath的布局工具构建吸引人的表单 2.使用InfoPath表格工具 3.在表单上添加字段和控件 4.使用section和container组织表单里的控件 5.在一个表单上 ...
- iOS 从各种效果图颜色标注生成 UIColor
iOS 从各种效果图颜色标注生成 UIColor 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公 ...
- JavaScript事件驱动机制&定时器机制
在浏览器中,事件作为一个极为重要的机制,给予JavaScript响应用户操作与DOM变化的能力.在NodeJS中.异步事件驱动模型则是提高并发能力的基础. 一.程序怎样响应事件 程序响应外部的事件有两 ...
- iOS中respondsToSelector与conformsToProtocol的相关理解和使用
respondsToSelector相关的方法 : -(BOOL) isKindOfClass: classObj 用来判断是否是某个类或其子类的实例 -(BOOL) isMemberOfClass: ...