给定一字符串为:"ABC"
要能打印出:
ABC
ACB
BAC
BCA
CAB
CBA
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
static void arrange(char *s, int start, int end);
int main(int argc, char **argv)
{
if (argc != 2) {
printf("usage: ./allrange <string>\n");
exit(EXIT_FAILURE);
}
arrange(argv[1], 0, strlen(argv[1]));
exit(EXIT_SUCCESS);
}
static void arrange(char *s, int start, int end)
{
int i;
char tmp;
if (start == end) {
printf("%s\n", s);
} else {
for (i = start; i < end; i++) {
tmp = s[start]; s[start] = s[i]; s[i] = tmp;
arrange(s, start + 1, end);
tmp = s[start]; s[start] = s[i]; s[i] = tmp;
}
}
}
分享到:
- 2008-09-26 15:06
- 浏览 1661
- 评论(0)
- 论坛回复 / 浏览 (0 / 3190)
- 查看更多
相关推荐
常见得全排列有三种解决方案,for循环穷举,stl摸板函数next_permutation,还有DFS深度优先搜索,当我们遇到带有重复的字符串时应该考虑除去重复的部分。
可以打印出字符串的全排列,代码是C语音风格的,刚学习编程时写的代码
输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba 思路 这是典型的递归求解问题,递归算法有四个特性: 必须有可...
输入一个字符串,按字典序打印出该字符串中字符的所有排列。 例如,输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 思路: 1.利用递归形成递归树,达到深度优先,固定首字母的...
简单的实现,代码很短。...输入一个字符串,输出它的字符的所有组合的情况 如输入“abc”,则输出abc,acb,bac,bca,cab,cba。 但如果输入“aba”,即有重复的,也会输出aba,aab,baa,baa,aba,aab。
生成这些字符的不重复的全排列,并将结果打印到标准输出上。 【输入形式】 从标准输入上读入一个由字母、数字组成的字符串,字符串的长度小于100,其中包含重复的字符。 【输出形式】 向标准输出印...
输入一个字符串,打印出该字符串中字符的所有排列。 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。 示例: 输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"] 限制: 1 <= s 的长度 &...
13.3 字符串的所有子回文字符串 13.4 最长公共子序列问题 13.5 字符串的编辑距离 13.6 不同路径之和 13.6.1 无障碍13.6.2 有障碍 13.7 最大矩形面积 13.8 字符串交叉组合 13.9 旋转字符串 13.10 最小路径和 13.11 ...
85 <br>0131 巧截字符串的数字 86 <br>0132 如何存储变长字符串 86 <br>0133 在进行字符串比较时忽略大小写 87 <br>0134 如何去除字符串尾空格 87 <br>0135 如何去掉字符串中所有空格 ...
序言:关于扑克牌的表示 由于扑克牌中有一张牌是10 两位 字符串表示起来有些麻烦 当我们检测到用户输入10的时候 a[i] "1" a[i+1] "0" 我们用字母S代替10 同时产生扑克牌的时候 注意如果产生...
直观想法就是求出这个数组中所有数字的全排列,然后拼接起来,再比较大小即可,当然复杂度过高。 另一个想法,我们可以定义一个排序规则,如下: 如果两个数m,n能拼接成数字mn,nm,如果mn>nm,则m应该在n前面...
4.19 递归反向输出字符串 4.20 一年中的第几天 第5章 数学趣题(一) 5.1 舍罕王的失算 5.2 求两个数的最大公约数和最小公倍数 5.3 歌德巴赫猜想的近似证明 5.4 三色球问题 5.5 百钱买百鸡问题 5.6 判断回文数字 ...