有十个数,任取其中N个(N从1到10),使他们之和大于等于M,如何用C/C++编程求出所有组合并记录。

例如这十个数是1到10,M=15。取两个的话有:5,10;6,10;……等组合。取三个有1,4,10;2,3,10;……等组合。依次类推。然后将所有组合存入一个数组中。有... 例如这十个数是1到10,M=15。
取两个的话有: 5,10; 6,10;……等组合。
取三个有 1,4,10; 2,3,10;……等组合。
依次类推。
然后将所有组合存入一个数组中。
有没有高级点的算法,不是无脑for循环。10个数只是假设,如果10变成了100,或者更多如何编写,能不能有具体程序?可追加悬赏。

有i个数,任取其中N个(N从1到i),使他们之和大于等于M,如何用C/C++编程求出所有组合并记录。
展开
 我来答
百度网友8f410c1
2013-05-15
知道答主
回答量:20
采纳率:0%
帮助的人:17.6万
展开全部
这个题目要求出并记录所有组合,所以for循环是省不了的,但是可以做到不无脑。

首先分析一下题目,设取出的N个数和为y,那么可以得出:
y的最大值为 i+(i-1)+(i-2)+···+(i-N+1)
进行检定:如果y的最大值小于M,那么无解;否则,y的最大值肯定满足条件,使用for循环,依次逐渐减小N个数的值,直至y=M,则输出了所有解。

代码我就不写了,算法如上,再举例说明一下最后中情况for循环的思路,就拿楼主的例子说明:
“十个数,从1到10,M=15,N=3”
首先,10、9、8必然满足条件,将第三个数从8开始减小,一直到1都满足条件;
然后,减小第二个数,起始为10、8、7,再将第三个数从7开始减小,一直到1都满足条件;
···
最终当循环到6、5、4时,再减小将不满足条件,输出完毕。

还有什么疑问,再追问
xnd09
2013-05-11 · TA获得超过201个赞
知道小有建树答主
回答量:350
采纳率:100%
帮助的人:97.2万
展开全部
你查查关于排列组合的做法,找到所有组合,求和,删选,即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ylpsghr881212
2013-05-15 · 超过30用户采纳过TA的回答
知道答主
回答量:166
采纳率:0%
帮助的人:63.7万
展开全部
j=1+(int)(10.0*rand()/(RAND_MAX+1.0)); 用这个来取1-10之间的随机数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式