学习C++从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。
附上汇总贴:蓝桥杯备考冲刺必刷题(C++) | 汇总-CSDN博客
【题目描述】
小蓝和小桥是游戏世界里的两个好友,他们正在玩一个有趣的挑战。他们手中有一个长度为
n
n
n的神秘物品序列,每个物品都有一个数字
a
i
a_i
ai表示它的价值。他们可以执行以下操作:
- 选择一个物品,并将其价值加 1 1 1。
小蓝和小桥希望通过若干次操作使得这个序列的价值之和与价值的积都不为
0
0
0。
请你帮他们计算,至少需要执行多少次操作才能完成这个挑战。
【输入】
第一行包含一个整数
t
(
1
≤
t
≤
100
)
t(1\le t\le 100)
t(1≤t≤100),表示测试用例的数量。
接下来
t
t
t行,每行包含两行数据,第一行为一个整数
n
(
1
≤
n
≤
1000
)
n(1\le n\le 1000)
n(1≤n≤1000),表示物品的数量。第二行为
n
n
n个整数
a
1
,
a
2
,
…
,
a
n
(
−
1000
≤
a
i
≤
1000
)
a_1,a_2,\dots,a_n(-1000\le a_i\le 1000)
a1,a2,…,an(−1000≤ai≤1000),表示初始的物品价值。
【输出】
对于每个测试用例,输出一行一个整数,表示至少需要执行的操作次数。
【输入样例】
2
2
0 0
3
-1 0 1
【输出样例】
2
1
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int t, n, a[1005];
int main()
{
cin >> t; // 输入t
while (t--) { // 遍历t次测试
int ans = 0, tot=0;
cin >> n; // 输入n
for (int i=1; i<=n; i++) { // 输入n个物品价值
cin >> a[i];
}
for (int i=1; i<=n; i++) { // 遍历所有物品
if (a[i]==0) { // 如果价值为0,则进行加1
a[i]=a[i]+1;
ans++; // 操作次数也加1
}
tot += a[i]; // 同时计算所有物品价值总和
}
if (tot!=0) { // 当总和不为0,则直接输出操作次数
cout << ans << endl;
} else { // 否则再增加1次,和就不会为0
cout << ans+1 << endl;
}
}
return 0;
}
【运行结果】
2
2
0 0
2
3
-1 0 1
1