用递归算法解x1+x2+x3+x4+x5+x6+x7+x8+x9+x10=100有多少组解?
答案:2 悬赏:70
解决时间 2021-01-21 00:43
- 提问者网友:謫仙
- 2021-01-20 10:57
用递归算法解x1+x2+x3+x4+x5+x6+x7+x8+x9+x10=100有多少组解?
最佳答案
- 二级知识专家网友:撞了怀
- 2021-01-20 12:33
int a[10];
int sum=0;
int f(a, i){
if(i<0 || i>10){return;}
if(i==10){
if(a[0]+a[1]...+a[9]==100){
sum+=1;
printf a;
}
return;
}
for(j=0;j<101;j++){
a[i]=j;
f(a,i+1);
}
}
void main(){
f(a, 0);
}
sum就是解数。
追问:能不能给点分析过程,谢谢!
追答:问题抽象为给定数的范围是0-100,从中取10个数,使得其和为100,求出全部集合。
欲想求得这10个数的集合,可以求得确定第1位后的所有集合。
欲想求得确定第1位后的所有集合,可以求得确定第2位后的所有集合。
。。。。。。
欲想求得确定第9位后的所有集合,可以求得确定第10位后的所有集合。
这明显是递归算法。
设f(a,i)为全部集合,a为集合存储器,i为位数。
f(a,i){
if(i<0 || i>10){return;}//防止输入不合法的i
if(i==10){ //说明存储器满了
if(a[0]+a[1]...+a[9]==100){//存储器里面的数字是否符合条件
sum+=1;//符合+1
printf a;//输出该数组
}
return;//返回上一层函数
}
for(j=0;j<101;j++){
a[i]=j;//确定第i+1的数字,当i为0时,就是确定第1位的数字
f(a,i+1);//求得确定第i+1位后的所有集合
}
int sum=0;
int f(a, i){
if(i<0 || i>10){return;}
if(i==10){
if(a[0]+a[1]...+a[9]==100){
sum+=1;
printf a;
}
return;
}
for(j=0;j<101;j++){
a[i]=j;
f(a,i+1);
}
}
void main(){
f(a, 0);
}
sum就是解数。
追问:能不能给点分析过程,谢谢!
追答:问题抽象为给定数的范围是0-100,从中取10个数,使得其和为100,求出全部集合。
欲想求得这10个数的集合,可以求得确定第1位后的所有集合。
欲想求得确定第1位后的所有集合,可以求得确定第2位后的所有集合。
。。。。。。
欲想求得确定第9位后的所有集合,可以求得确定第10位后的所有集合。
这明显是递归算法。
设f(a,i)为全部集合,a为集合存储器,i为位数。
f(a,i){
if(i<0 || i>10){return;}//防止输入不合法的i
if(i==10){ //说明存储器满了
if(a[0]+a[1]...+a[9]==100){//存储器里面的数字是否符合条件
sum+=1;//符合+1
printf a;//输出该数组
}
return;//返回上一层函数
}
for(j=0;j<101;j++){
a[i]=j;//确定第i+1的数字,当i为0时,就是确定第1位的数字
f(a,i+1);//求得确定第i+1位后的所有集合
}
全部回答
- 1楼网友:神鬼未生
- 2021-01-20 13:15
是x*1,还是十个数字相加??
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯