中易网

用递归算法解x1+x2+x3+x4+x5+x6+x7+x8+x9+x10=100有多少组解?

答案:2  悬赏:70  
解决时间 2021-01-21 00:43
用递归算法解x1+x2+x3+x4+x5+x6+x7+x8+x9+x10=100有多少组解?
最佳答案
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位后的所有集合
}
全部回答
是x*1,还是十个数字相加??
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
谁比较清楚手机为什么收不到验证码了
客厅灯安装在哪位置比较好?
这样借钱的方式,你会不会借,问题是在你真的
谁有个人房屋转租范本?
麦粒肿能吃鸡蛋吗
额头上面两角脱发是因为什么?
品益a-06定时器设定电动车充电时间怎样操作设
请问多动症需要做什么检查呢?
心爱你若有了解是什么歌
哪首歌词有叹这世道乱
为什么现在Pixiv站打不开?
卫浴十大品牌有那些品牌家里用好
27岁女孩做美容冠还是戴牙套好?
乔雅登注射需要多少钱?哪位知道?请帮指点一
弱精症多长时间可以看好,
推荐资讯
饭团怎么吃,是要用那个紫菜把饭团包起来一起
哺乳期脸上长脓包怎么办
1983年大连至上海三等仓船票价格是多少
腰疼穿衣服腰疼那个位置衣服都黑了怎么回事
设∑Un绝对收敛,∑Vn收敛,证明∑UnVn绝对收
电视机分哪几种?
当孩子被一群大孩子取笑时怎么办
世纪秀理容中心怎么去啊,有事要去办理
请问申请谢菲尔德大学的研究生要什么条件?本
3点水旁边放一个斤是什么字?
k8台球馆怎么去啊,我要去那办事
甲模甲样美甲工作室地址好找么,我有些事要过
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?