c++ - 如何从数组元素的总和中减去最小元素
问题描述
对于每个测试用例 t,我需要输入 n,即数组中元素的数量,然后输入这些元素。然后我必须从所有其他元素的总和中减去数组中的最小元素。这是我的代码,但我不断收到 TLE:
#include <bits/stdc++.h>
int main(void) {
int t;
std::cin >> t;
while (t --) {
int n, sum = 0, a, k = 100000;
std::cin >> n;
while (n --) {
std::cin >> a;
if (a < k) {
k = a;
} else {
sum += a;
}
n --;
}
std::cout << abs(sum - k) << "\n";
}
}
样本输入:
3
5
20 16 8 2 13
6
16 9 12 20 15 14
4
2 2 2 2
样本输出:
55
68
4
解决方案
在这个 if 语句中
if (a < k) {
您正在将每个输入的值与 的当前值进行比较k
,如果它小于 k 则不将其添加到sum
.
例如对于这个数字序列
20 16 8 2 13
20 小于 k 的初始值。所以 nowk
等于 20 并且这个数字不加到 sum.. 下一个数字 16 也小于 k 的当前值。再次,它没有被添加到总和中。
您需要对所有数字求和,同时找到最小数字。然后在循环之后从总和中减去最小的数字。
还有这个说法
n --;
是多余的。
该程序可以如下所示
#include <iostream>
int main()
{
unsigned int t = 0;
std::cin >> t;
while ( t-- )
{
unsigned int n = 0;
long long int sum = 0;
int min = 0;
bool first = true;
std::cin >> n;
while ( n-- )
{
int x;
std::cin >> x;
if ( first || x < min )
{
first = false;
min = x;
}
sum += x;
}
std::cout << ( sum < min ? min - sum : sum - min ) << '\n';
}
return 0;
}
对于输入
1
5
20 16 8 2 13
程序输出是
57
推荐阅读
- linux - 无法在 CentOS 7 上安装 Docker 17
- flutter - 在颤动中卸载资产
- java - 可以将侦听器添加到没有引用名称的对象吗?
- android - 在android上向Mapbox Map添加多个标记,无法将源添加到mapboxMap
- oracle - ORA-01017 在 APEX ORDS 安装期间
- macos - Catalina 下的快速操作权限
- python - 我的模板已损坏,无法获取静态文件
- python - 如何使用 python 对使用 android 应用录制的音频执行应用内音频处理?
- python - 如何检查哪个线程首先返回结果
- ignite - 集群范围的未定义行为 [threadName=data-streamer-stripe