abc排列问题

来源:互联网 发布:智联招聘 java开发 编辑:程序博客网 时间:2024/06/05 20:12
例:
用户输入:a,b,c
输出: a,b,c,ab,ac,bc,abc
解:此程序应不仅适用于3个字符的情况~运用递归即可解决:
法1:
[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. #include<stdio.h>  
  2. #include<string.h>  
  3.   
  4. #define MAX 100  
  5.   
  6. int top = 0;        //缓冲区指针。  
  7. int count = 1;      //统计组合数。  
  8.   
  9. void search(char *a, char *b, int start)    //a:待组合的字符串;b:缓冲区数组;start:当前开始位置。  
  10. {  
  11.     int i, len = strlen(a);  
  12.     for(i = start; i < len; i++)  
  13.     {  
  14.         b[top++] = a[i];        //将选出的字符存入缓冲区。  
  15.         printf("Line: %2d   %s\n", count++, b);     //将缓冲区中选出的字符输出。  
  16.         if(i < len-1) search(a, b, i+1);         //若能继续选择字符,则递归。  
  17.         b[--top] = '\0';        //将缓冲区中最后一个字符弹出,缓冲区指针前移一个单位。  
  18.     }  
  19. }  
  20.   
  21. int main()  
  22. {  
  23.     char a[MAX], b[MAX];  
  24.     int n;  
  25.     memset(a, '\0'sizeof(a));  
  26.     memset(b, '\0'sizeof(b));  
  27.     printf("请输入待组合字符串:");  
  28.     scanf("%s", a);  
  29.     search(a, b, 0);  
  30.     return 0;  
  31. }  
运行结果:

法2:
[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. #include <stdio.h>  
  2. #include <string.h>  
  3.   
  4. int main()  
  5. {  
  6.     int i, j, n;  
  7.     char str[100];  
  8.     scanf("%s", str);  
  9.     n = strlen(str);  
  10.     for (i = 1; i < 1<<n; ++i)//组合的个数。  
  11.     {  
  12.         for (j = 0; j <= n-1; ++j)//依次输出符合条件的字符。  
  13.             if (1<<j & i) putchar(str[j]);  
  14.         puts("");  
  15.     }  
  16.     return 0;  
  17. }  
结果:
0 0
原创粉丝点击