蓝桥杯备考冲刺必刷题(C++) | 3238 小蓝和小桥的挑战

学习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(1t100),表示测试用例的数量。
接下来 t t t行,每行包含两行数据,第一行为一个整数 n ( 1 ≤ n ≤ 1000 ) n(1\le n\le 1000) n(1n1000),表示物品的数量。第二行为 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(1000ai1000),表示初始的物品价值。
【输出】
对于每个测试用例,输出一行一个整数,表示至少需要执行的操作次数。
【输入样例】

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值