根据最小总和查找数组的元素

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)


Mat*_*ard 7

我假设你只想要数组中的第一个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"包含总和达到或超过阈值的指数.