打印整数划分

来源:互联网 发布:传奇地图编辑器软件 编辑:程序博客网 时间:2024/06/05 17:55

整数的分划问题。 

如,对于正整数n=6,可以分划为: 

5+1 

4+2, 4+1+1 

3+3, 3+2+1, 3+1+1+1 

2+2+2, 2+2+1+1, 2+1+1+1+1 

1+1+1+1+1+1+1 

现在的问题是,对于给定的正整数n,编写算法打印所有划分。

用户从键盘输入 (范围1~10

程序输出该整数的所有划分。


#include<stdio.h>int a[10]={0};  int len = 0;  void fun(int n,int m){        if(n==0){                            //所求数已被全部分划  printf("%d",a[0]);  for(int i=1;i<m;++i) {printf("+%d",a[i]);} if(m > len){  printf("\n");    //到每行最后一列长度m都为len+1,此时应换行  ++len;  }  else  printf(",");  return;      }      for(int i=n;i>=1;--i){//按从大到小的顺序划分整数          if(m==0||i<=a[m-1]) {//右边的数不能大于左边的数  a[m]=i;  fun(n-i,m+1);          }      }  }  int main() {       int n,m=0;       scanf("%d",&n);   //输入要被划分的数字      fun(n,m);        //递归的方法打印所有的整数分划      return 0;  }       


0 0
原创粉丝点击