做题感悟:全排列

好的,我们来看这道题

全排列

总时间限制: 1000ms 内存限制: 65536kB
描述

给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有‘a‘ < ‘b‘ < ... < ‘y‘ < ‘z‘,而且给定的字符串中的字母已经按照从小到大的顺序排列。

输入
输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。
输出
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。

很显然,这是一道可以用很多方法解决的题,但是在这里我推荐一位奆佬的方法,虽然有点麻烦(小声吐槽)

首先,由于输入是一个字符串,所以我们先开一个用于存储初始化自符串的数组a(字符串),将a输入后就来到了最为关键的阶段,这里用到了一个搜索的算法(虽然主体是递归)

以第一个数作为第一位,从第一个数开始搜索,每搜索完一个就利用一个bool数组将其标记,之后便只搜索未标记的字符,并写入数组c(字符串)中,当字符串c的位数与a相同(用到了strlen(求长))时,就进行输出,再回溯到一 步,并取消标记,全部进行完成后再将第二个数作为第一位,依次类推。。。。

我觉得讲的很明白了(显然不成立)

最后,附上代码

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 bool b[1001];
 5 char s[1001],ans[1001];
 6 int len;
 7 void dfs(int i)
 8 {
 9     for(int j=0;j<len;++j)
10     {
11         if(b[s[j]]==0)
12         {
13             b[s[j]]=1;
14             ans[i]=s[j];
15             if(i==len-1)
16             {
17                 printf("%s\n",ans);
18             }
19             else
20             {
21                 dfs(i+1);
22             }
23             b[s[j]]=0;
24         }
25     }
26 }
27 int main()
28 {
29     scanf("%s",s);
30     len=strlen(s);
31     dfs(0);
32 }

原文地址:https://www.cnblogs.com/yufenglin/p/10013777.html

时间: 2024-10-23 11:29:16

做题感悟:全排列的相关文章

做题感悟:放苹果

其实,这道题在一开始我就想到了正确解法的一部分,但是因为某闫同学而否定了自己(毕竟只想到了一部分). 好的我们先来看一下这道题: 放苹果 总时间限制:  1000ms 内存限制:  65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 第一行是测试数据的数目t(0 <= t <= 20).以下每行均包含二个整数M和N,以空格分开.1<=M,N<=10. 输出 对输入的每组数

做题感悟:爬楼梯

可能看到标题大家会很惊讶,毕竟这道题实在是太简单了,但是,我要讲的并不是这道题. 爬楼梯 总时间限制: 1000ms 内存限制:  65536kB 描述 树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级也可以第一次走两级,第二次走一级,一共3种方法. 输入 输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= N <= 30 输出 不同的走法数,每一行输入对应一行输出 样例输入 5 8 10

做题感悟(PlayGrounds决策树关卡)

1.很重要的编程思想,分解问题,重组代码 2.做下图这道题的时候,总想着一步解决,在一个循环里解决所有问题,应该是拆分分支路线,在主路线重组分支路线代码,在合并 原文地址:https://www.cnblogs.com/zhifeiji822/p/12420967.html

线段树例题及做题误区

学会了一系列的线段树之后发现 除了扫描线还不是很熟之外一些操作基本上是得心应手了. 但是仍是很菜,在此再次深有感悟 以后做题再看题解 直接剁手 我就不信不看题解自己的思路出现错误 每次都当我 有了正确的思路之时 却被一些 很迷的思路 误导去看题解,看完题解之后才恍然大悟 .这点需要注意!!!我想我都窥出正解了为什么不能再多想想呢? 真的是超级没有成就感 感觉是非常难受的 好题被自己一时看了题解毁了这是我作为一个正在学习的人所极不想看见的. . 这道题还不错 对线段树是一个考察 如果能仔细思考的话

python做题

Python题目 1.打印一个九九乘法表 #!/usr/bin/env python # -*- coding: utf-8 -*- """ __author__ = 'YeXiaodong' __QQ__= '12519460' __Email__ = '[email protected]' """ x = 1 list_table = [] print('九九乘法表'.center(100,' ')) while x < 10: lis

做题神器风靡:在线教育虚火旺盛的罪魁祸首是谁?

在线教育的巨大潜力有目共睹,不管是创业者还是巨头都纷纷杀入其中.在线教育本身囊括的范围极其广阔,从胎教.学龄前教育.中小学教育.高等教育,再到职业教育,乃至细分化的英语教育.技能教育等,构成一个完整的教育生态圈.但让人无奈的是,国内在线教育最火爆的却还是中小学教育. 而且由于国内教育体系本身存在的弊端,导致中小学教育主要以书山题海为工具,向高分发起追逐.在这样的大背景下,在线教育最火爆的是各种做题神器App.做题神器的风靡,让整个在线教育行业看起来形势一片大好.然而,做题神器真的就是解决在线教育

USACO 做题小结

还记得之前,发过一篇阶段性总结与未来规划..结果由于最近rp爆发(保研成功+进wf)后者显然靠bin神,前者也是运气.因此,放松了一段时间.然后就开始刷usaco了,原因是不用花时间找解题报告在NOCOW上全部都有,很是方便.所以只需单独开一片随笔把每天做题总结一下. Chapter1-Getting started(入门) 都是超级大水题就略过了. Chapter2-Bigger Challenges(更大的挑战) 2.1 castle  这是一道基本的搜索题目,很基础.前面两个值直接搜的,后

acm做题心得&amp;&amp;语录

1.切一道难题,总比做百道水题轻松,而且显然前者对你有本质的提升.(后续更新) acm做题心得&&语录,布布扣,bubuko.com

我做题、比赛的头文件,不断更新中

我做题.比赛的头文件~ 特别是那个rep特别好用,写起来明显速度快多了 #include <cstdio> #include <iostream> s#include <string.h> #include <cstdlib> #include <algorithm> #include <queue> #include <vector> #include <cmath> #include <map>