字母表的特殊排列组合
2017-01-12 18:42
621 查看
写一个程序,打印出以下的序列。
(a),(b),(c),(d),(e)........(z)
(a,b),(a,c),(a,d),(a,e)......(a,z),(b,c),(b,d).....(b,z),(c,d).....(y,z)
(a,b,c),(a,b,d)....(a,b,z),(a,c,d)....(x,y,z)。
#include <stdio.h>
#include <stdlib.h>
#define SIZE 8
//生成字母表
void createAphalbit(char* aphal) {
int i = 0;
for (; i < SIZE; i++) {
aphal[i] = i + 'a';
}
aphal[i] = '\0';
}
void calcPemutation(char* aphal, char* result, int reach, int len) {
if (len == reach) {
result[reach] = '\0';
int i = 0;
int printable = 1;
//去除降序或等序序列
for (; i + 1 < len; i++) {
if (result[i] >= result[i + 1]) {
printable = 0;
break;
}
}
if (printable) {
int i = 0;
printf("(");
printf("%c", result[i++]);
for (; i < len; i++) {
printf(",%c", result[i]);
}
printf(")");
}
} else {
int i = 0;
for (; i < SIZE; i++) {
//结果拾取
result[reach] = aphal[i];
calcPemutation(aphal, result, reach + 1, len);
}
}
}
//指定结果集长度下调用
void ctrlPos(char* str, int len) {
int i = 0;
char result[len + 1];
// for (; i < len; i++) {
calcPemutation(str, result, i, len);
// }
}
//长度控制
void ctrlLength(char* str) {
int i = 1;
for (; i <= SIZE; i++) {
ctrlPos(str, i);
printf("\n");
}
}
int main(void) {
char aphalbit[SIZE + 1];
createAphalbit(aphalbit);
ctrlLength(aphalbit);
return EXIT_SUCCESS;
}
(a),(b),(c),(d),(e)........(z)
(a,b),(a,c),(a,d),(a,e)......(a,z),(b,c),(b,d).....(b,z),(c,d).....(y,z)
(a,b,c),(a,b,d)....(a,b,z),(a,c,d)....(x,y,z)。
#include <stdio.h>
#include <stdlib.h>
#define SIZE 8
//生成字母表
void createAphalbit(char* aphal) {
int i = 0;
for (; i < SIZE; i++) {
aphal[i] = i + 'a';
}
aphal[i] = '\0';
}
void calcPemutation(char* aphal, char* result, int reach, int len) {
if (len == reach) {
result[reach] = '\0';
int i = 0;
int printable = 1;
//去除降序或等序序列
for (; i + 1 < len; i++) {
if (result[i] >= result[i + 1]) {
printable = 0;
break;
}
}
if (printable) {
int i = 0;
printf("(");
printf("%c", result[i++]);
for (; i < len; i++) {
printf(",%c", result[i]);
}
printf(")");
}
} else {
int i = 0;
for (; i < SIZE; i++) {
//结果拾取
result[reach] = aphal[i];
calcPemutation(aphal, result, reach + 1, len);
}
}
}
//指定结果集长度下调用
void ctrlPos(char* str, int len) {
int i = 0;
char result[len + 1];
// for (; i < len; i++) {
calcPemutation(str, result, i, len);
// }
}
//长度控制
void ctrlLength(char* str) {
int i = 1;
for (; i <= SIZE; i++) {
ctrlPos(str, i);
printf("\n");
}
}
int main(void) {
char aphalbit[SIZE + 1];
createAphalbit(aphalbit);
ctrlLength(aphalbit);
return EXIT_SUCCESS;
}
相关文章推荐
- 字母表的特殊排列组合
- (组合数学3.3.2.2)UVA 10497 - Sweet Child Makes Trouble(特殊的排列问题——错排方案数)
- LotusScript生成随机密码(数字、字母、特殊字符组合)
- 12个字母任选5个进行排列组合,不可重复 javascript 递归实现
- 字母数字穷举排列组合域名,位数递增,网络爬虫,网页抓取
- c++ 递归实现不同字母的全排列组合
- 用select from dual生成字母的排列组合
- POJ-3049 字母排列组合 (元音辅音要求)
- 排列组合问题
- hdu 1799 排列组合求C(n,m)+预处理
- 判断密码至少8位包含大小写字母,数字,特殊符号四选三
- 全排列,组合问题
- [经典面试题]排列组合专题
- java 字符串排列组合
- hpu 练习二 eof不能出现o与o 一起时,确定字母长度,求排列方式
- 字符串的全排列和组合算法
- DEDECMS修改验证码为数字和小写字母组合
- javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
- 输出n对括号的所有有效排列组合
- js实现全排列组合算法