2013-04-25 57 views
3

我有以下计算一个数组的“部分总和”的程序。例如,如果我输入连续整数1, 1, 1, 1std::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做,但我宁可不使用它,因为它不允许我完全理解这是如何工作。

任何想法?谢谢。

回答

5

您不需要两个嵌套for循环。将sum的初始化移出for循环以跟踪sum,因为您在orig上迭代。随时随地用sum简单覆盖orig中的值。

在伪代码:

sum = 0 
for each index i in array: 
    sum += array[i] 
    array[i] = sum 
+0

谢谢。完美的作品! – 2013-04-25 22:13:53

0

你不能在这个过程中打印出来而不存储呢?

sum = 0 ; 
for (int i = 0 ; i < 10 ; i++) 
{ 
    sum += orig[ i ] ; 
    std::cout << sum << "\n" ; 
} 
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")); 
} 

代码here

+0

最优秀的答案。 – Escualo 2013-04-25 23:16:17

+0

我实际使用这样的事情,不同的是它是与载体:'的std :: patial_sum(v.begin(),v.end(),v.begin())',然后我打印出来。但你的方式似乎更好。谢谢! – 2013-04-25 23:27:50