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 }
  • 相关阅读:
    3.创建第一个android项目
    2.SDK目录结构和adb工具及命令介绍
    1.安卓开发之环境搭建
    组成原理习题(一)
    微软职位内部推荐-Software Development Engineer II
    微软职位内部推荐-Enterprise Architect
    微软职位内部推荐-Senior NLP Scientist & Developer
    微软职位内部推荐-Sr DEV Lead, Bing Search Relevance
    微软职位内部推荐-Principal DEV Manager for Bing Client
    微软职位内部推荐-Principal Dev Manager for Windows Phone Shell
  • 原文地址:https://www.cnblogs.com/linhaowei0389/p/6596098.html
Copyright © 2011-2022 走看看