• 九度oj 题目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
    提示:

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

     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <string>
     5 #include <algorithm>
     6 
     7 int cmp(const void *a, const void *b) {
     8     char at = *(char *)a;
     9     char bt = *(char *)b;
    10     return at - bt;
    11 }
    12 
    13 char temp[10];
    14 char oTemp[10];
    15 int flag[10];
    16 
    17 void dfsShow(int len, int has) {
    18     for(int i = 0; i < len; i++) {
    19         if(flag[i] == 0) {
    20             oTemp[has] = temp[i];
    21             if(has == len-1) {
    22                 puts(oTemp);
    23             }
    24             flag[i] = 1;
    25             dfsShow(len, has+1);
    26             flag[i] = 0;
    27         }
    28     }
    29 }
    30 
    31 int main(int argc, char const *argv[])
    32  {
    33      while(scanf("%s",&temp) != EOF) {
    34          int len = strlen(temp);
    35          qsort(temp, len, sizeof(char), cmp);
    36          //puts(temp);
    37          memset(flag, 0, sizeof(flag));
    38          oTemp[len] = '';
    39          dfsShow(len, 0);
    40          puts("");
    41      }
    42      return 0;
    43  } 

    开始没看见提示,格式错误,只好又提交一次了

  • 相关阅读:
    【Web-Components】document.registerElement
    Date
    类型转换
    【Web-Components】HTML imports
    【Web-Components】
    【Web-Components】Shadow Dom
    【Mobile】
    数据库读写分离
    HDU——T 1711 Number Sequence
    洛谷——P2957 [USACO09OCT]谷仓里的回声Barn Echoes
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5725314.html
Copyright © 2020-2023  润新知