Chinaunix首页 | 论坛 | 博客
  • 博客访问: 528214
  • 博文数量: 96
  • 博客积分: 2102
  • 博客等级: 上尉
  • 技术积分: 1695
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:12
文章分类

全部博文(96)

文章存档

2014年(2)

2012年(94)

分类: C/C++

2012-04-30 10:16:13

将整数划分成为多个整数相加。
例如:6=5+1
           6=4+2
           6=4+1+1
           6=3+3
           6=3+2+1
           6=3+1+1+1
           6=2+2+2
           6=2+2+1+1
           6=2+1+1+1+1
           6=1+1+1+1+1+1

localhuafen.h

  1. # ifndef _LOCAL_HUAFEN_H_
  2.  # define _LOACL_HUAFEN_H_

  3. #define TRUE 1
  4. #define FALSE 0

  5. int panduan(char *, int);
  6. void HuaFen(int, char *);
  7. void show(char *, int);
  8. # endif

huafen.c

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

  4. #include"local_huafen.h"
  5. int total=0;

  6. void show(char *ans,int total)
  7. {
  8.     int len = strlen(ans)-1;
  9.     int index=0;

  10.     printf("%d = ",total);

  11.     for( ;index < len; index++)
  12.         printf("%d + ",ans[index]-'0');
  13.     printf("%d\n",ans[index]-'0');
  14. }
  15. int panduan(char *ans ,int len)
  16. {
  17.     int index = 0;

  18.     if(len<1)
  19.         return FALSE;
  20.     for( ; index< len-1 ;index++)
  21.         if(ans[index] < ans[index+1])
  22.             return FALSE;
  23.     return TRUE;
  24. }
  25. void HuaFen(int to,char *ans)
  26. {
  27.     static count ;
  28.     int in = to;
  29.     if(to>=1) {
  30.         for( ; in >=1; in--){
  31.             ans[count++] = in+'0';
  32.             if(panduan(ans,count)==TRUE)
  33.                  HuaFen(to-in,ans);
  34.             ans[--count] = 0;
  35.         }
  36.      } else
  37.         show(ans,total);

  38. }
  39. int main()
  40. {
  41.     char * ans=NULL;
  42.    
  43.     printf("please input the intger:");
  44.     scanf("%d",&total);
  45.     if(total >0) {
  46.         ans = malloc((total+1) * sizeof *ans);
  47.         HuaFen(total,ans);
  48.         free(ans);
  49.     } else
  50.         printf("please input zheng zheng shu!!!\n");
  51.     ans = NULL;
  52.     return 0;
  53. }
结果:


输入小于或等于0的数:

阅读(1225) | 评论(0) | 转发(0) |
0

上一篇:C 标准库 error.h

下一篇:递归之组合---代码

给主人留下些什么吧!~~