C语言每日小练(三)——abc排列问题
2014-04-10 22:04
387 查看
例:
用户输入:a,b,c
输出: a,b,c,ab,ac,bc,abc
解:此程序应不仅适用于3个字符的情况~运用递归即可解决:
法1:
法2:
用户输入:a,b,c
输出: a,b,c,ab,ac,bc,abc
解:此程序应不仅适用于3个字符的情况~运用递归即可解决:
法1:
#include<stdio.h> #include<string.h> #define MAX 100 int top = 0; //缓冲区指针。 int count = 1; //统计组合数。 void search(char *a, char *b, int start) //a:待组合的字符串;b:缓冲区数组;start:当前开始位置。 { int i, len = strlen(a); for(i = start; i < len; i++) { b[top++] = a[i]; //将选出的字符存入缓冲区。 printf("Line: %2d %s\n", count++, b); //将缓冲区中选出的字符输出。 if(i < len-1) search(a, b, i+1); //若能继续选择字符,则递归。 b[--top] = '\0'; //将缓冲区中最后一个字符弹出,缓冲区指针前移一个单位。 } } int main() { char a[MAX], b[MAX]; int n; memset(a, '\0', sizeof(a)); memset(b, '\0', sizeof(b)); printf("请输入待组合字符串:"); scanf("%s", a); search(a, b, 0); return 0; }运行结果:
法2:
#include <stdio.h> #include <string.h> int main() { int i, j, n; char str[100]; scanf("%s", str); n = strlen(str); for (i = 1; i < 1<<n; ++i)//组合的个数。 { for (j = 0; j <= n-1; ++j)//依次输出符合条件的字符。 if (1<<j & i) putchar(str[j]); puts(""); } return 0; }结果:
相关文章推荐
- 关于指针的一些事情
- 关于C语言中参数的传值问题
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C/C++数据对齐详细解析
- C++中引用的使用总结
- C与C++之间相互调用实例方法讲解
- C++中引用(&)的用法与应用实例分析
- 探讨C语言的那些小秘密之断言
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- 解析C++ 浮点数的格式化输出
- 基于C语言fflush()函数的使用详解
- 深入分析C++中几个最不常用的关键字
- 关于C语言除0引发的思考
- 深入分析C中不安全的sprintf与strcpy
- 探讨register关键字在c语言和c++中的差异
- C中实现矩阵乘法的一种高效的方法
- c语言printf函数的使用详解
- c++中inline的用法分析