我要做的是在数组中打印每两个数字的总和
这是我的代码:
#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]等等,每两个数字在一行中。那我怎么能这样做呢?
答案 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