C语言求字母的全部组合
使用的递归的方法:既然是组合,则顺序不要求顺序了。
主要原理就是从第一个字符开始,分两种情况:1.留下此字符;2.去除此字符。 再对剩下的字符求组合。
然后再第二个字符,分两种情况,再对剩下的字符求组合
转载请注明出处:http://blog.csdn.net/fdl19881/article/details/7983268
#include <stdlib.h>
#include <stdio.h>
#include <string.h>template <typename T>
inline void swap(T &a , T &b)
{T tmp;tmp = a;a = b;b = tmp;
}void doPrintAllCombination(char *str , int begin , int end)
{if(begin == end) {char tmp;if(end != 0) { //i要此字符时tmp = str[end];str[end] = '\0';printf("%s\n",str);str[end] = tmp;}tmp = str[end+1]; //不要此字符str[end+1] = '\0';printf("%s\n" , str);str[end+1] = tmp;return;}//第二种情况,去除此字符swap(str[begin],str[end]);doPrintAllCombination(str , begin , end-1);swap(str[begin] , str[end]);//第一种情况,留下此字符doPrintAllCombination(str , begin+1 , end);
}
void printAllCombination(char *str)
{doPrintAllCombination(str , 0 , strlen(str)-1);
}int main(int argc , char *argv[])
{if(argc != 2) {printf("usage: %s <string>\n" , argv[0]);return -1;}char *str = (char*)malloc(strlen(argv[1]) + 1);strcpy(str , argv[1]);printf("orignate string : %s\n" , str);printAllCombination(str);free(str);return 0;
}
结果:
orignate string : abc
b
c
cb
a
ac
ab
abc
结果中有些字符的顺序改变了,如cb ,,按正常顺序可能是bc,,,
这是因为我的这个程序的空间复杂度为O(1)
如果你要求产生的组合与原始字符的顺序一致,,则可以使用mask代替,,标记使用不使用此字符。此时空间复杂度为O(N)
反正时间复杂度都为O(N)
C语言求字母的全部组合相关推荐
- C语言字母的组合,C语言求字母的全部组合
使用的递归的方法:既然是组合,则顺序不要求顺序了. 主要原理就是从第一个字符开始,分两种情况:1.留下此字符:2.去除此字符. 再对剩下的字符求组合. 然后再第二个字符,分两种情况,再对剩下的字符求组 ...
- 求 26个字母任意3个字母的所有组合
/** h5java.........cn* 求 26个字母任意3个字母的所有组合*/ public class Print{private static int num = 3; //需要组合的字母 ...
- C语言求输入字符的字母和数字个数
C语言求输入字符的字母和数字个数 问题描述:输入一行字符,统计其中的字母个数,数字个数,空格个数. 算法分析:利用while循环遍历玩整个字符串,依次判断字符的类型 #include<stdio ...
- Bailian2688 求字母的个数【输入流】
求字母的个数 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个字符串中找出元音字母a,e,i,o,u出现的次数. 输入 输入一行字符串(字符串中可能有空格,请用gets(s)方法把 ...
- 1-3 5-7的c语言程序,C语言求1-1/3+1/5-1/7+...——小程序,大道理
问题:用C语言编写程序求1-1/3+1/5-1/7+... 示例: #include void main(){ int n=; float sum=,a=; while(a<=){ sum=su ...
- Python语言程序设计第七章 - 组合数据类型 - 6.1
目录 Python语言程序设计第七章 - 组合数据类型 集合运算 集合的关系 集合综合练习 元组元素抓7 元组解包 升序降序 截取部分元素 判断元素书否在列表中存在 头尾对调 翻转列表 指定元素对调 ...
- 用C语言求排列组合数
用C语言求排列组合数 #include <stdio.h> #include <stdlib.h>double f(int a, int b);//因为排列数可大可小,所以返回 ...
- 图片验证码——在gVerify.js 的基础之上完善了一下,实现汉字,字母和数字组合的验证码
在gVerify.js 的基础之上完善了一下,实现汉字,字母和数字组合的验证码,效果图如下: <!DOCTYPE html> <html><head><met ...
- 字母使用频率统计c 语言编程,C语言统计字母使用频率
与<C语言统计字母使用频率>相关的范文 实验一 一.实验名称:替代密码和置换密码的实现 二.实验目的:通过编程实现替代密码算法和置换密码算法,加深对古典密码体系的了解,为以后深入学习密码学 ...
最新文章
- linux vim编辑器主要作用,Linux-vim编辑器
- android IPC 进程间通讯
- 转: linux 命令行设置网络
- 反应堆Reactor
- 自动驾驶安全驾驶规则_自动驾驶知识科普 自动驾驶汽车的七大核心技术
- 使用data()方法缓存数据
- oracle死锁优化,Oracle性能优化之LockContention(转)
- 总结在开发中常用的Linux命令
- 专科计算机专业大学,计算机专业大学排名 专科生学计算机专业好吗
- git 日常用法记录
- Java实现简单的计算器(原创)
- 刘海I关于iPhone X 的适配
- 「Algospot」量化QUANTIZE
- 2021-09-06单纯形计算方法(
- i2c-tools安装与使用总结
- word中如何替换一些特殊符号
- PDF格式转JPG格式怎么转?掌握方法其实很简单
- 最全离散数学 集合运算基本法则(包括差集公式)
- C语言 判断一个数是否为2的若干次幂
- leetcode剑指Offer2
热门文章
- 关于计算机500字英语作文,500字英语作文
- SuperMap webgl 中使用的gltf模型制作方法
- 樱花泪计算机音乐,樱花泪(纯音乐)
- python批量添加姓名生成奖状批量处理图片教师学生奖状
- oracle 倒库详细步骤,科二倒车入库操作步骤高清图解,一步一解读,非常实用!...
- matplotlib常用绘图风格
- OpenCV+OCR文字识别
- C/C++中.bss段的解释
- 一个比较全的vim命令
- esxtop 指标%RDY,NUMA,Wide-VMs