-2

给定一个包含 N 个整数的数组。我的任务是打印所有整数的总和。

输入:

输入文件的第一行包含一个整数 T,它表示测试用例的数量。对于每个测试用例,将有两行。第一行包含 N 表示数组中元素的数量,第二行包含 N 个空格分隔的整数。

输出:

对应每个测试用例,在新行中打印数组的总和。

约束:

1 <= T <= 100

1 <= N <= 1000

0 <= Arr[i] <= 200

#include <iostream>
using namespace std;

int main()
{
    int n, no_of_elem_array;
    int arr[50], sum[50];

    cin >> n;

    int j = 0;

    while (n--) {
        cin >> no_of_elem_array;

        for (int i = 0; i < no_of_elem_array; i++) {
            cin >> arr[i];
        }

        for (int i = 0; i < no_of_elem_array; i++) {
            sum[j] = sum[j] + arr[i];
        }
        j++;
    }
    for (int i = 0; i < n; i++) {
        cout << sum[i] << endl;
    }

    return 0;
}

输出

2

4

1 2 3 4

6

5 8 3 10 22 45

4

3 回答 3

1

在你的最后一个循环中有 n

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

变成 0 在

         while(n--)

这就是为什么它不打印任何东西

于 2020-07-17T06:59:52.547 回答
0

这不是在 C++ 中添加数组的方式:

这是我建议的代码:

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

int main() {
    std::vector<int> vec_of_ints;
    std::cout << "Enter the size of the array: ";
    unsigned size = 0;
    std::cin >> size;
    vec_of_ints.resize(size);
    for(auto& integer : vec_of_ints) {
        std::cin >> integer;
    }
    std::cout << std::accumulate(vec_of_ints.begin(), vec_of_ints.end(), 0);
    return 0;
}

此外,正如@Alan Birtles 所建议的,还有另一种(更好的)替代方案:

您根本不需要存储输入

int main() {
    unsigned size = 0;
    std::cin >> size;
    long sum = 0;
    for (int i = 0; i < size; i++) {
        int num = 0;
        std::cin >> num;
        sum += num;
    }
    std::cout << sum << "\n";
    return 0;
}
于 2020-07-17T07:00:29.703 回答
-1

两个问题:

  1. 你的数组不够大,所以会有无效的访问,这是未定义的行为。

  2. 数组sum是局部变量,所以值是未初始化的(即分配时包含任意值),您需要自己将它们设置为零。

于 2020-07-17T06:58:32.530 回答