九度OJ 1120 全排列 -- 实现C++STL中next_permutation()
题目地址:http://ac.jobdu.com/problem.php?pid=1120
- 题目描述:
-
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。
我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。
- 输入:
-
输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。
- 输出:
-
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:
已知S = s1s2...sk , T = t1t2...tk,则S < T 等价于,存在p (1 <= p <= k),使得
s1 = t1, s2 = t2, ..., sp - 1 = tp - 1, sp < tp成立。
- 样例输入:
-
abc
- 样例输出:
-
abc
acb
bac
bca
cab
cba
- 提示:
-
每组样例输出结束后要再输出一个回车。
图片来自参考资料
#include <stdio.h>
#include <string.h> void Swap(char str[], int i, int j);
void Reverse(char str[], int first, int last);
int next_permutation(char str[], int first, int last); int main(void)
{
int len;
char str[10];
while (scanf("%s", str) != EOF){
len = strlen(str);
printf("%s\n", str);
while (next_permutation(str, 0, len)){
printf("%s\n", str);
}
printf("\n");
} return 0;
} int next_permutation(char str[], int first, int last){
int i, j;
i = last - 2;
while (i >= 0 && str[i] >= str[i+1])
--i;
if (i == -1){
Reverse(str, first, last);
return 0;
}
j = last - 1;
while (str[j] <= str[i]){
--j;
}
Swap(str, i, j);
Reverse(str, i + 1, last);
return 1;
} void Swap(char str[], int i, int j){
char temp;
temp = str[i];
str[i] = str[j];
str[j] = temp;
} void Reverse(char str[], int first, int last){
last--;
while (first < last){
Swap(str, first++, last--);
}
}
九度OJ上相似的题目:http://ac.jobdu.com/problem.php?pid=1369
LeetCode上相似的题目:http://oj.leetcode.com/problems/next-permutation/
参考资料:ACM Cheat Sheet
九度OJ 1120 全排列 -- 实现C++STL中next_permutation()的更多相关文章
- 九度OJ 1120:全排列 (DFS)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4471 解决:1139 题目描述: 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列. 我们假设对于小写字母有'a' < ...
- 九度oj 1349 数字在排序数组中出现的次数
原题链接:http://ac.jobdu.com/problem.php?pid=1349 二分.. #include<algorithm> #include<iostream> ...
- 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找
题目地址:http://ac.jobdu.com/problem.php?pid=1349 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数 ...
- 九度OJ 1356:孩子们的游戏(圆圈中最后剩下的数) (约瑟夫环)
时间限制:10 秒 内存限制:32 兆 特殊判题:否 提交:1333 解决:483 题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为JOBDU的资深 ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ 1502 最大值最小化(JAVA)
题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...
- 九度OJ,题目1089:数字反转
题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...
- 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)
题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...
随机推荐
- iOS动画详解(一)
Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的绘图.变换.颜色管理.脱屏渲 ...
- 【转】使用junit4进行单元测试(高级篇)
转自:http://blog.csdn.net/andycpp/article/details/1329218 通过前 2 篇文章,您一定对 JUnit 有了一个基本的了解,下面我们来探讨一下JUni ...
- go操作数据库 Go-SQL-Driver/MySQL 使用详解
go操作mysql的驱动包很多,这里讲解当下比较流行的Go-SQL-Driver/MySQL1.下载安装 执行下面两个命令: 下载:go get github.com/Go-SQL-Driver/My ...
- [MODx] Build a CMP (Custom manager page) using MIGX in MODX 2.3 -- 1
BIG FUCK for MODx MODx document is not that good ... at least in my opint of view. I spend hours t ...
- Android手机上判断网络运营商
我们想获取手机的运营商信息.通常都会去调用系统的TelephonyManager类的取数据.但是很多时候可能取不到卡的信息(例如双卡手机和 一些特殊卡),这样就区别不了运营商了.但是有时候我们的需求要 ...
- 关于Log4j的初始化
1Log4j是什么 Log4j是Apache比較优秀的开源项目.在各个平台和项目中有较为广泛的应用.是为JAVA平台开发的日志管理平台.同一时候,Log4j也是JAVA开发项目中使用比較普遍的日 ...
- yum、RPM常用的命令(转)
# yum install xxx 安装xxx软件# yum info xxx 查看xxx软件的信息# yum remove xxx ...
- swfupload操作手册
SWFUpload SWFUpload 最初是Vinterwebb.se 开发的客户端文件上传工具.它联合javascript和flash,在浏览器中提供一个优于传统上传标签 <input ty ...
- Linux shell之数组
引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...
- [转]Oracle学习笔记——权限管理
本文转自:http://www.cnblogs.com/whgw/archive/2011/10/30.html 一.系统的默认用户 1)sys用户是超级用户,具有最高权限,具有sysdba角色,有c ...