
有十个数,任取其中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++编程求出所有组合并记录。 展开
取两个的话有: 5,10; 6,10;……等组合。
取三个有 1,4,10; 2,3,10;……等组合。
依次类推。
然后将所有组合存入一个数组中。
有没有高级点的算法,不是无脑for循环。10个数只是假设,如果10变成了100,或者更多如何编写,能不能有具体程序?可追加悬赏。
有i个数,任取其中N个(N从1到i),使他们之和大于等于M,如何用C/C++编程求出所有组合并记录。 展开
3个回答
展开全部
这个题目要求出并记录所有组合,所以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时,再减小将不满足条件,输出完毕。
还有什么疑问,再追问
首先分析一下题目,设取出的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时,再减小将不满足条件,输出完毕。
还有什么疑问,再追问
展开全部
你查查关于排列组合的做法,找到所有组合,求和,删选,即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
j=1+(int)(10.0*rand()/(RAND_MAX+1.0)); 用这个来取1-10之间的随机数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询