3

我有以下程序计算数组的“部分和”。例如,如果我1, 1, 1, 1通过std::cin我的程序输入连续的整数,则会将结果计算为一个数组1, 2, 3, 4

#include <iostream>

int main()
{
    int orig[10], copy[10];
    std::cout << "please enter 10 numbers:" << std::endl;

    for (int i = 0; i < 10; i++)
    {
        std::cin >> orig[i];
    }

    for (int i = 0; i < 10; ++i)
    {
        int sum = 0;
        for (int k = i; k >= 0; --k)
        {
            sum += orig[k];
        }
        copy[i] = sum;
    }

    std::cout << "the ascending order is:\n" << endl;
    for (int i = 0; i < 10; ++i)
        std::cout << copy[i] << std::endl;
}

我的问题是我希望有一种方法可以做到这一点,而无需将值复制到另一个数组中。到目前为止,我还没有弄清楚如何。如您所见,在上面的代码中,我有一个名为的整数数组copy,我将总和放入其索引中。我知道这可以使用std::vectorpartial_sum但我宁愿不使用它,因为它不允许我完全理解它是如何工作的。

有任何想法吗?谢谢。

4

3 回答 3

5

您不需要两个嵌套for循环。将 的初始化sum移出循环以在迭代时for跟踪. 只需在使用时覆盖其中的值。sumorigorigsum

在伪代码中:

sum = 0
for each index i in array:
  sum += array[i]
  array[i] = sum
于 2013-04-25T22:06:33.993 回答
1

我知道您不想使用partial_sum,但它很简单:

#include <iostream>
#include <iterator>
#include <numeric>

int main()
{
    using namespace std;
    partial_sum(istream_iterator<int>(cin),
                istream_iterator<int>(),
                ostream_iterator<int>(cout, "\n"));
}

代码在这里

于 2013-04-25T22:26:09.523 回答
0

您不能在不存储的情况下在此过程中打印出来吗?

sum = 0 ;
for ( int i = 0 ; i < 10 ; i++ )
{
   sum += orig[ i ] ;
   std::cout << sum << "\n" ;
}
于 2013-04-25T22:10:19.913 回答