有十个数,任取其中N个(N从1到10),使他们之和大于等于M,如何用C/C++编程求出所有组合并记录.例如这十个数是1到10,M=15.取两个的话有:5,10; 6,10;……等组合.取三个有 1,4,10; 2,3,10;……等
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/30 23:27:23
![有十个数,任取其中N个(N从1到10),使他们之和大于等于M,如何用C/C++编程求出所有组合并记录.例如这十个数是1到10,M=15.取两个的话有:5,10; 6,10;……等组合.取三个有 1,4,10; 2,3,10;……等](/uploads/image/z/4092344-8-4.jpg?t=%E6%9C%89%E5%8D%81%E4%B8%AA%E6%95%B0%2C%E4%BB%BB%E5%8F%96%E5%85%B6%E4%B8%ADN%E4%B8%AA%EF%BC%88N%E4%BB%8E1%E5%88%B010%EF%BC%89%2C%E4%BD%BF%E4%BB%96%E4%BB%AC%E4%B9%8B%E5%92%8C%E5%A4%A7%E4%BA%8E%E7%AD%89%E4%BA%8EM%2C%E5%A6%82%E4%BD%95%E7%94%A8C%2FC%2B%2B%E7%BC%96%E7%A8%8B%E6%B1%82%E5%87%BA%E6%89%80%E6%9C%89%E7%BB%84%E5%90%88%E5%B9%B6%E8%AE%B0%E5%BD%95.%E4%BE%8B%E5%A6%82%E8%BF%99%E5%8D%81%E4%B8%AA%E6%95%B0%E6%98%AF1%E5%88%B010%2CM%3D15.%E5%8F%96%E4%B8%A4%E4%B8%AA%E7%9A%84%E8%AF%9D%E6%9C%89%EF%BC%9A5%2C10%EF%BC%9B+6%2C10%EF%BC%9B%E2%80%A6%E2%80%A6%E7%AD%89%E7%BB%84%E5%90%88.%E5%8F%96%E4%B8%89%E4%B8%AA%E6%9C%89+1%2C4%2C10%EF%BC%9B+2%2C3%2C10%EF%BC%9B%E2%80%A6%E2%80%A6%E7%AD%89)
有十个数,任取其中N个(N从1到10),使他们之和大于等于M,如何用C/C++编程求出所有组合并记录.例如这十个数是1到10,M=15.取两个的话有:5,10; 6,10;……等组合.取三个有 1,4,10; 2,3,10;……等
有十个数,任取其中N个(N从1到10),使他们之和大于等于M,如何用C/C++编程求出所有组合并记录.
例如这十个数是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++编程求出所有组合并记录.
有十个数,任取其中N个(N从1到10),使他们之和大于等于M,如何用C/C++编程求出所有组合并记录.例如这十个数是1到10,M=15.取两个的话有:5,10; 6,10;……等组合.取三个有 1,4,10; 2,3,10;……等
这个题目要求出并记录所有组合,所以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时,再减小将不满足条件,输出完毕.
还有什么疑问,再追问