题目地址: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成立。

样例输入:
  1. abc
样例输出:
  1. abc
  2. acb
  3. bac
  4. bca
  5. cab
  6. cba
提示:

每组样例输出结束后要再输出一个回车。

来源:
2008年北京大学图形实验室计算机研究生机试真题

图片来自参考资料

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void Swap(char str[], int i, int j);
  5. void Reverse(char str[], int first, int last);
  6. int next_permutation(char str[], int first, int last);
  7.  
  8. int main(void)
  9. {
  10. int len;
  11. char str[10];
  12. while (scanf("%s", str) != EOF){
  13. len = strlen(str);
  14. printf("%s\n", str);
  15. while (next_permutation(str, 0, len)){
  16. printf("%s\n", str);
  17. }
  18. printf("\n");
  19. }
  20.  
  21. return 0;
  22. }
  23.  
  24. int next_permutation(char str[], int first, int last){
  25. int i, j;
  26. i = last - 2;
  27. while (i >= 0 && str[i] >= str[i+1])
  28. --i;
  29. if (i == -1){
  30. Reverse(str, first, last);
  31. return 0;
  32. }
  33. j = last - 1;
  34. while (str[j] <= str[i]){
  35. --j;
  36. }
  37. Swap(str, i, j);
  38. Reverse(str, i + 1, last);
  39. return 1;
  40. }
  41.  
  42. void Swap(char str[], int i, int j){
  43. char temp;
  44. temp = str[i];
  45. str[i] = str[j];
  46. str[j] = temp;
  47. }
  48.  
  49. void Reverse(char str[], int first, int last){
  50. last--;
  51. while (first < last){
  52. Swap(str, first++, last--);
  53. }
  54. }

九度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()的更多相关文章

  1. 九度OJ 1120:全排列 (DFS)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4471 解决:1139 题目描述: 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列. 我们假设对于小写字母有'a' < ...

  2. 九度oj 1349 数字在排序数组中出现的次数

    原题链接:http://ac.jobdu.com/problem.php?pid=1349 二分.. #include<algorithm> #include<iostream> ...

  3. 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找

    题目地址:http://ac.jobdu.com/problem.php?pid=1349 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数 ...

  4. 九度OJ 1356:孩子们的游戏(圆圈中最后剩下的数) (约瑟夫环)

    时间限制:10 秒 内存限制:32 兆 特殊判题:否 提交:1333 解决:483 题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为JOBDU的资深 ...

  5. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  6. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  7. 九度OJ 1502 最大值最小化(JAVA)

    题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...

  8. 九度OJ,题目1089:数字反转

    题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...

  9. 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)

    题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...

随机推荐

  1. 7Zip 来备份重要文件(夹)

    body { font-family: 宋体,Georgia,Helvetica,Arial,sans-serif,宋体,serif; font-size: 10.5pt; line-height: ...

  2. Files to be needed by importing the android application with eclipse

    1. AndroidManifest.xml 2. project.properties # This file is automatically generated by Android Tools ...

  3. android图片处理方法(不断收集中)

    //压缩图片大小 public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArr ...

  4. PAT 1007

    1007. Maximum Subsequence Sum (25) Given a sequence of K integers { N1, N2, ..., NK }. A continuous ...

  5. 一个小例子讲讲jsonp

    1.何为jsonp(json with padding) json我们都知道并用过.那么jsonp呢,呃,好像听过,但没用过.很久以来楼主也只是听过这个名词而已.直到今晚楼主看到一篇文章(http:/ ...

  6. Ambiguous mapping found. Cannot map 'xxxxController' bean method

    1.背景 今天要做一个demo,从github上clone一个springmvc mybatis的工程(https://github.com/komamitsu/Spring-MVC-sample-u ...

  7. Objec类和final关键字的用法

    一.在继承中,子类继承父类,那父类继承谁呢,java中如果类没有指定继承谁,那么就默认继承Object类,object类是所有对象的直接或者间接的父类,根类,或者叫做基类,它里面定义的功能所有的对象都 ...

  8. Java系统程序员修炼之道

    一:Java语言学习 对线程(thread),串行化,反射,网络编程,JNI技术,容器(Map,List, Iterator), 类加载器 (ClassLoader),输入输出流,垃圾回收机制, 有比 ...

  9. Java读取一个文件并打印到控制台上

    package test9; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundExcept ...

  10. 配置Linux数据转发(给其他接口转发一个接口的internet网络)

    配置Linux数据转发 [主机]第一步开启转发net.ipv4.ip_forward = 1echo "1" > /proc/sys/net/ipv4/ip_forward第 ...