读书人

C语言整数区划跪求大神

发布时间: 2012-11-05 09:35:12 作者: rapoo

C语言整数划分跪求大神
整数的分划问题。
如,对于正整数n=6,可以分划为:
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,编写算法打印所有划分。
用户从键盘输入 n (范围1~10)
程序输出该整数的所有划分。
求大神、能帮忙写个注释吧、网上的没注释、实在看不懂

[解决办法]
仅供参考

C/C++ code
#include <stdio.h>#include <stdlib.h>void print(int res[], int num) {    static int L=0;    L++;    printf("%8d:",L);    for (int i=0;i<num;++i) {        printf(" %d", res[i]);    }    printf("\n");}void split(int n, int m) {// n表示总数,m表示最大因子    static int res[100];// 保存结果    static int num=-1;// 当前因子下标    if (n<m || n<0 || m<1) return;    num++;    if (0==n) {// 递归终止条件,为0不可再分,直接输出        print(res,num+1);        num--;        return;    } else {        if (n==m) {// 不拆,直接输出            res[num]=m;            print(res,num+1);            num--;        } else {            // 拆分出第一个            res[num]=m;            n=n-m;            if (m>n) m = n; // 最大因子不可能大于总数            for (int i=m;i>=1;--i) {// 循环,第二个因子可以继续拆分,而且按照最大因子不同可以拆分成多个                split(n,i);            }            num--;        }    }}void Split(int n) {    if (n<=0) return;    if (100<n) {        printf("Up to 100\n");        return;    }    for (int i=n;i>=1;--i) {        split(n, i);    }}void main(int argc,char **argv) {         if (argc<=1) Split(5);    else if (argc>=3) split(atoi(argv[1]),atoi(argv[2]));    else              Split(atoi(argv[1]));} 

读书人网 >C语言

热点推荐