100以内数字的加法组合解构。

luj_1768 2019-01-23 02:49:28
int*** s;//use to store the result. int a=101;//the last number to be operated. int* count;//use to counting the number of the possible formularies. void foo(){ for(int I=0; I<a;I++){ if (I==0){ s[0][0][0]=0; count[0]=1;}; elseif(I==1){ s[1][0][0]=1; count[1]=1;}; else{ count[i]=0; while //set a max value, c=int(i/max); m=i%max; then s[i][j][0 to c-1]=max; s[i][j to j+count[m]][c to c+m] is related with s[m][][]. //j is a count with how many combinations . } } }; } }
...全文
133 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
luj_1768 2019-01-23
  • 打赏
  • 举报
回复
其实我写的一部分内容是与递归同效的,都是利用前面的计算结果生成后面的数据。如果你完成我的程序代码,就会发现运行结果肯定和你的递归代码产生的数据不一样,然后你就会发现你的代码数据漏失有多大了。我的程序算法是满全的,不会出漏错。
赵4老师 2019-01-23
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出
赵4老师 2019-01-23
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 26
int comb[MAX_NUM];
int c1,c2;
void combination(int m,int n) {
int i,j;

for (i=m;i>=n;i--) {
comb[n]=i; /* 选择当前的“头”元素 */
if (n>1) {
combination(i-1,n-1); /* 进入下一次更小的组合问题 */
} else { /* 满了需要的组合数,输出 */
for (j=comb[0];j>0;j--) printf("%c",'A'+c1-comb[j]);
printf("\n");
}
}
return;
}
int main(int argc,char **argv) {
if (argc<3) {
printf("%s 组合下标 组合上标\n",argv[0]);
return 1;
}
c1=atoi(argv[1]);
if (c1<1 || MAX_NUM<c1) {
printf("1<=组合下标<=%d\n",MAX_NUM);
return 2;
}
c2=atoi(argv[2]);
if (c2<1 || c1<c2) {
printf("1<=组合上标<=组合下标\n");
return 3;
}
comb[0]=c2;
combination(c1,c2);
return 0;
}

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧