如何在c ++中找到数组中每2个数字的总和?

时间:2017-12-18 23:24:59

标签: c++ arrays

我要做的是在数组中打印每两个数字的总和 这是我的代码:

#include <iostream>
using namespace std;
int main () {
int n;
cin>>n;
int arr[n*2];
int sum = 0;
int count = 0;
for (int i = 0 ; i<n*2 ; i++)
{
    count++;
    cin>>arr[i];
    if (count%2==0)
    {
        sum+=arr[i];


    }

    }
for (int i = 0 ; i<n ; i++)
    cout<<sum<<endl;
}


为什么这段代码打印整个数组的总和而不是数组中的每2个元素?
例如,我想打印一些arr [0] + arr [1],arr [2] + arr [3],arr [4] + arr [5]等等,每两个数字在一行中。那我怎么能这样做呢?

3 个答案:

答案 0 :(得分:0)

您不需要使用数组。您可以保存以前的值。

int previous = 0;
int present  = 0;
unsigned int quantity;
cin >> quantity;
for (unsigned int i = 0; i < quantity; ++i)
{
  cin >> present;
  const int sum = previous + present;
  cout << sum << "\n";
  previous = present;
}

上面的代码片段使用变量previous来存储输入的前一个数字。

由于总和仅为前一个和现在,因此不需要整个数组或std::vector

输出:

6  // Quantity
4  // First number 
4  // Sum: first number + 0, since there is no previous.
5  // Input number 2
9  // Sum: previous (4) + present (5).
6
11
7
13
20
27
8
28

编辑1:使用数组
以下示例使用数组: unsigned int quantity = 0;

cin >> quantity;
int * p_array = new int [quantity];
for (unsigned int i = 0; i < quantity; ++i)
{
  cin >> p_array[i];
}
for (unsigned int i = 1; i < quantity; ++i)
{
  const int sum = p_array[i] + p[i - 1];
  cout << sum << "\n";
}
delete [] p_array;

是的,这可以通过一次通过,但如果你想要效率,请使用第一个例子。

答案 1 :(得分:0)

正如评论中已经指出的那样,C ++标准没有变长数组这样的特性。

因此,您应该声明一个固定大小的数组,或者使用标准容器std::vector

如果一个数组已经声明并填充了值,那么输出总和的相应循环可以按照以下方式显示,如演示程序中所示。

#include <iostream>

int main() 
{
    int a[] = { 7, 1, 5, 4, 3, 2, 7, 5 };
    const size_t N = sizeof( a ) / sizeof( *a );

    for ( size_t i = 0; i < N;  )
    {
        long long int sum = a[i++];
        if ( i != N ) sum += a[i++];

        std::cout << sum << ' ';
    }

    std::cout << std::endl;

    return 0;
}

程序输出

8 9 5 12

答案 2 :(得分:0)

以下是使用std::accumulate函数并使用值在容器中递增的简短解决方案:

#include <iostream>
#include <vector>
#include <numeric>

int main()
{
    int incValue = 2;

    // assume number of data is evenly divisible by incValue
    std::vector<int> arr = { 7, 1, 5, 4, 3, 2, 7, 5 };  

    // add incValue items at a time in a loop, and output results each iteration
    for ( auto startIter = arr.begin(); startIter != arr.end(); startIter += incValue)
        std::cout << std::accumulate(startIter, startIter + incValue, 0) << " ";
}

输出:

8 9 5 12