use*_*572 2 c++ arrays sum subset-sum
我用C++编写了一个循环给我6个随机数并将它们存储在一个数组中.我想要做的是总结数组的元素,直到我得到一个大于数字"x"的值,但我想这样做而不必添加所有元素.目标是找到与x的值相加的第一个元素.
例如,数组是[1,2,3,4,5,6],和x = 6,所以我要寻找的是元素[1,2,3].
我查看了标准库并尝试使用"valarray"中的sum函数,但这只是给出了所有元素的总和.任何有关如何成功编码的想法将不胜感激.
Mar*_*ork 11
写一个添加的仿函数.
#include <algorithm>
struct SumToo
{
SumToo(int val):m_val(val),m_sum(0) {}
int m_val;
int m_sum;
bool operator()(int next)
{
m_sum += next;
return m_sum >= m_val;
}
};
int main()
{
int data[] = {1,2,3,4,5,6};
int* find = std::find_if(data,data+6,SumToo(6));
}
Run Code Online (Sandbox Code Playgroud)
我假设你只想要数组中的第一个X元素,直到它们的总和达到或超过阈值(那里的问题有点模糊).
如果是这样,我不知道如何在没有自己的循环的情况下做到这一点:
int sum = 0;
int i = 0;
for( ; i < len; ++i ) {
sum += array[i];
if( sum >= 6 ) {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
现在"i"包含总和达到或超过阈值的指数.