字符串的排列和组合(不考虑字符重复的情况)
2014-06-03 15:03
323 查看
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> void permu(char *); void permutation(char *, char *); void combination(char *);//方法1 void combination2(char *, int);//方法2 int main() { char str[5] = "abc"; // combination(str); combination2(str,3); // permu(str); system("pause"); return 0; } void permu(char *str) { if (str == NULL || str == "") { return; } permutation(str, str); } void permutation(char *pStr, char *pBegin) { char temp, *pCh = pBegin; if (*pBegin == '\0') { printf("%s\n", pStr); } else { for (pCh = pBegin; *pCh != '\0'; pCh++) { temp = *pCh; *pCh = *pBegin; *pBegin = temp; permutation(pStr, pBegin + 1); temp = *pCh; *pCh = *pBegin; *pBegin = temp; } } } void combination(char *str) { int char_num = 0, flag = 0, temp = 0; int *decial = NULL; int i, num = 0, add = 0; if (str == NULL || str == "") { return; } for (i = 0; str[i] != '\0'; i++) { char_num++; } decial = (int *)malloc((char_num + 1) * sizeof(int)); for (i = 0; i < char_num + 1; i++) { *(decial + i) = 0; } while (1) { add = 1; for (i = 0; ; i++) { temp = decial[i] + flag + add; decial[i] = temp % 2; flag = temp / 2; if (flag == 0) { break; } add = 0; } if (decial[char_num] == 1) { break; } for (i = 0; i < char_num + 1; i++) { if (decial[i] == 1) { printf("%c", str[i]); } } printf("\n"); } free(decial); } void combination2(char *str, int N)//N为字符的个数 { int i,j; int num = pow(2.0, N) ; for(i=1;i<num;i++) { for(j=0;j<N;j++) { if((i>>j)&1) printf("%c", str[j]); } printf("\n"); } }
相关文章推荐
- java练习: 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如: 原始字符串是"abc",打印得到下列所有组合情况
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符。
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
- JAVA----编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
- 输出一个字符串所有排列。注意有重复字符
- 显示字符串中所有字符的排列组合。
- 给定一个字符串,找出其所有不重复的排列组合
- 传入一个字符串参数 获取这个字符串内所有字符的 不同排列情况
- nullnull计算两个字符串链表中的共同数据项,需要考虑重复选项的情况
- Swift - 排列组合之全排列 (输入一个字符串,输出该字符串包含的字符的所有组合)
- 字符串的全排列问题(一)——无重复出现字符的排列
- 显示字符串中所有字符的排列组合。
- 字符串中字符的所有组合(组合中的先后顺序不考虑)
- 输出字符串的所有排列组合情况
- 求字符串的全部组合(字符串中无重复字符)
- <AJJL004>随机10个数,取出5个最小值,从小到大排列(需考虑出现重复数的情况)
- 不同的取法输出顺序可以不考虑。取字符( 从标准输入读入一个由字母构成的串(不大于30个字符)。从该串中取出3个不重复的字符,求所有的取法。取出的字符,要求按字母升序排列成一个串。)
- 题目:剔除一个字符中重复的字符,然后按ASCII码值从小到大排列。 例如,输入:abbcccddeeeffgghh 输出:abcdefgh 注意:1、剔除是整个字符串中重复的字符,而不是连续的字符 2
- 已知一个有重复字符的字符串,打印其所有不同的字符排列