我有以下程序来计算数组的“部分和”。例如,如果我输入连续整数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::vector
和partial_sum
完成,但我不想使用它,因为它不允许我完全理解它是如何工作的。
有什么想法吗?感谢。
答案 0 :(得分:5)
您不需要两个嵌套的for
循环。将sum
的初始化移出for
循环,以便在迭代sum
时跟踪orig
。您可以随时使用orig
覆盖sum
中的值。
在伪代码中:
sum = 0
for each index i in array:
sum += array[i]
array[i] = sum
答案 1 :(得分: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。
答案 2 :(得分:0)
你不能在没有存储的情况下将其打印出来吗?
sum = 0 ;
for ( int i = 0 ; i < 10 ; i++ )
{
sum += orig[ i ] ;
std::cout << sum << "\n" ;
}