为什么这不打印 sum 的最终输出?
Why is this not printing the final output of sum?
给定一个包含 N 个整数的数组。我的任务是打印所有整数的总和。
输入:
输入文件的第一行包含一个整数T,表示测试用例的数量。对于每个测试用例,将有两行。第一行包含 N,表示数组中的元素数,第二行包含 N space 个分隔的整数。
输出:
对应每个测试用例,换行打印数组之和
约束条件:
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
两期:
你的数组不够大,所以会出现无效访问,这是未定义的行为。
数组sum
是局部变量,所以该值是未初始化的(即分配时包含任意值),需要自己置零。
你最后的循环中有n个
for(int i=0; i<n; i++){
cout<<sum[i]<<endl;
}
在
中变为0
while(n--)
这就是它不打印任何东西的原因
这不是在 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;
}
给定一个包含 N 个整数的数组。我的任务是打印所有整数的总和。
输入:
输入文件的第一行包含一个整数T,表示测试用例的数量。对于每个测试用例,将有两行。第一行包含 N,表示数组中的元素数,第二行包含 N space 个分隔的整数。
输出:
对应每个测试用例,换行打印数组之和
约束条件:
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
两期:
你的数组不够大,所以会出现无效访问,这是未定义的行为。
数组
sum
是局部变量,所以该值是未初始化的(即分配时包含任意值),需要自己置零。
你最后的循环中有n个
for(int i=0; i<n; i++){
cout<<sum[i]<<endl;
}
在
中变为0 while(n--)
这就是它不打印任何东西的原因
这不是在 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;
}