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)
程序输出该整数的所有划分。
求大神、能帮忙写个注释吧、网上的没注释、实在看不懂
[解决办法]
仅供参考
#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]));}