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 <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int main() {
    char str[7];
    while (scanf("%s", str) == 1) {
        int len = strlen(str);
        do {
            puts(str);
        } while (next_permutation(str, str + len));
        putchar(‘\n‘);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/bernieloveslife/p/9735030.html

时间: 2024-10-22 23:51:16

1120.全排列的相关文章

题目1120:全排列(回溯法)

题目链接:http://ac.jobdu.com/problem.php?pid=1120 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: // // 1120 全排列.cpp // Jobdu // // Created by PengFei_Zheng on 23/04/2017. // Copyright © 2017 PengFei_Zheng. All rights reserved. // #include <stdio.

题目1120:全排列

题目描述: 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列.我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列. 输入: 输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间. 输出: 输出这个字符串的所有排列方式,每行一个排列.要求字母序比较小的排列在前面.字母序如下定义:已知S = s1s2...sk , T = t1t2...tk,则S < T 等价

九度 题目1120:全排列

题目描述: 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列. 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列. 输入: 输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间. 输出: 输出这个字符串的所有排列方式,每行一个排列.要求字母序比较小的排列在前面.字母序如下定义: 已知S = s1s2...sk , T = t1t2...tk,则S < T

生成n个元素的全排列 C实现

近期在准备复习算法设计的考试,下边记录一些,看笔记时突然想到的解法. 问题是这种 用递归实现 n 个元素的全排列. 当时老师给出的解答是 假定第i个元素 ri 放在首位,于是 f(r1,r2,-,rn) = f(ri U {r1, r2,-.,rn}) = U (ri & f(r1,r2, -, rn)), 当时应该是听懂了,只是如今看到这个笔记.又醉了. (这货竟然是我上课记的笔记 .... . .. .) 后来自己细致想想,事实上非常简单的 一个问题, 利用回溯法,把问题看成是一个排列树.能

递归实现全排列(一)

[思路] 下面用具体例子来阐述这种实现的思路,例如实现123的全排列组合. 要求123的全排列,可以分为以下情况: 情况1:第0位为1+23的全排列 情况2:第0位为2+13的全排列 情况3:第0位为3+32的全排列 上面的情况用代码实现如下: //情况1 //为了跟下面一致,加上swap(list[0],list[0]); perm(list,1,2); //为了跟下面一致,加上swap(list[0],list[0]); //情况2 swap(list[0],list[1]); perm(l

全排列算法-Java

第一步,排列的精髓是交换和顺序处理,比如,考虑[1,2,3,4]排列,实际上是,1和1,2,3,4分别交换得来 1和1交换:[1],[2,3,4] 1和2交换:[2],[1,3,4] 1和3交换:[3],[2,1,4] 1和4交换:[4],[2,3,1] 那么下面分别考虑上面的四个结果,比如,考虑 [1],[2,3,4] 第二步,我们把[1]固定不变,考虑[2,3,4],把它看成是2和2,3,4分别交换,得到如下结果: [1]固定,2和2交换:[1],[2],[3,4] [1]固定,2和3交换:

求数字或者字符串的全排列

以数字举例:有一个数组A的数为 :1 2 3 4 ,其按字典序列的全排列为: 1 2 3 4 1 3 2 4 1 3 4 2 1 4 2 3 1 4 3 2 2 1 3 4 2 1 4 3 2 3 4 1 ---. 总共有 n!个排列,现在输入一个数K,输出其第K的排列 方法:采用康托编码的思想,其实就是求出每个位置上的数字:第一个位置的数字,第二个位置的数字.... 解法:按顺序求出每个位置上的数,这边假设 K=8 :数组为:1 2 3 4 ,长度为4,位置p代表数组中第P个数:p=k/ (n

递归算法:求序列的全排列

用C++模板书写一段序列数组的全部排列 /** * 书本:[windows程序设计] * 功能:输出全部的排列情况 * 文件:全排列.cpp * 时间:2014年9月29日21:52:55 * 作者:cutter_point */ #include <iostream> using namespace std; //交换两个元素的函数 template<class Type> inline void Swap(Type &a, Type &b) //取两个元素的引用

深度优先排序(数字全排列)

输入一个整数n(n<10),输出1-n的全排列 1 import java.util.Scanner; 2 public class One { 3 //数组a(模拟放数字牌的盒子)用于存放排序数字,数组book[i]用于标记牌i是否已经放入数组a 4 public static int a[]=new int[10],book[]=new int[10],n; 5 //函数f()用于输出所有可能情况的排列. 6 public static void f(int x){//x为第几个盒子 7 i