zoukankan      html  css  js  c++  java
  • 每日编程-20170321

    题目:亮亮深吸一口气,小心地将盒子打开,里面是一张地图,地图上除了一些奇怪的字母以外没有任何路线信息,这可让亮亮犯了愁,这些字母代表了什么意思呢? 亮亮绞尽脑汁也想不出什么思路,突然,亮亮眼前一亮,“我可以把这些字母所有的排列方式全部写出来,一定可以找到答案!” 于是,亮亮兴奋的开始寻找字母里的秘密。

    输入描述:
    每组数据输入只有一行,是一个由不同的大写字母组成的字符串,已知字符串的长度在1到9之间,我们假设对于大写字母有'A' < 'B' < ... < 'Y' < 'Z'。

    输出描述:
    输出这个字符串的所有排列方式,每行一个排列,要求字母序比较小的排列在前面。

    输入例子:
    WHL

    输出例子:
    HLW

    HWL

    LHW

    LWH

    WHL

    WLH

    解答:

    递归好难搞

    整体思路就是,先把输入排序

    然后使用递归思想:

    将得到的数组的第一个与后面的依次互换

    将互换后的数组的第一个删掉,剩下的内容递归

    一直到剩下最后一个

    输出数组

     1 #include <iostream>
     2 #include <string>
     3 
     4 using namespace std;
     5 
     6 void Exchange(char &a, char &b) { char c = a;    a = b;    b = c; }
     7 void Arrange(char* s, int ss) {
     8     for (size_t i = 0; i < ss - 1; i++)
     9         for (size_t j = i + 1; j < ss; j++)
    10             if (s[i]>s[j])    Exchange(s[i], s[j]);
    11 }
    12 void quanPai(char *s, int ss, int pos) {  //依次输入数组,长度,开始位置
    13     if (pos == ss - 1){    cout << s << endl;    return;    }  //如果开始位置已经是最后一个,输出,返回
    14     for (size_t i = pos; i < ss; i++)  //将第一个依次与后面的互换
    15     {
    16         Exchange(s[pos], s[i]);
    17         quanPai(s, ss, pos+1);
    18         Exchange(s[pos], s[i]);  //每次换位都要基于原本的顺序,所以下一层返回后需要换回来
    19     }
    20 }
    21 
    22 int main() {
    23     char input[10];
    24     cin >> input;
    25     Arrange(input,strlen(input));
    26     quanPai(input, strlen(input), 0);
    27 }
  • 相关阅读:
    关于这个 blog
    P6499 [COCI2016-2017#2] Burza 题解
    CF1172F Nauuo and Bug 题解
    CF1479D Odd Mineral Resource 题解
    CF1442E Black, White and Grey Tree 题解
    CF1442D Sum 题解
    CF1025D Recovering BST 题解
    CF1056E Check Transcription 题解
    CF1025F Disjoint Triangles 题解
    红包算法的PHP实现
  • 原文地址:https://www.cnblogs.com/linhaowei0389/p/6596098.html
Copyright © 2011-2022 走看看