蓝桥杯python 小白逆袭之路

 

 

 

解题思路

这道题的解题思路比较简单,具体步骤如下:

  1. 读入测试数据的数量 tt,对于每组测试数据,读入物品数量 nn 和物品价值 a_1,a_2, \cdots, a_na1​,a2​,⋯,an​。

  2. 统计价值为 00 的物品个数 zz,并计算物品的价值和 sumsum。如果序列中存在 00,则我们需要对所有的 00 进行一次操作,使得其变为 11,这样才能保证价值积不为 00。因此,我们至少需要进行 zz 次操作。

  3. 对于经过操作后的序列,统计其所有元素的和 sumsum。如果 sum \neq 0sum=0,则此时的序列已经满足题目要求,输出操作次数 zz 即可。

  4. 如果 sum = 0sum=0,则我们需要对任意一个 a_i > 0ai​>0,并对其进行一次操作,使得其变为 a_i + 1ai​+1,因为只要序列中存在正整数,我们就可以利用这些正整数来使得序列的价值积不为 00。如果序列中不存在 a_i > 0ai​>0,则我们需要对任意一个元素进行一次操作,使得序列中至少有一个非 00 的元素,然后再按照上述方法进行操作。因此,此时的操作次数为 z + 1z+1。

 

 

python中for _ in range(10) 与 for i in range(10):

for _ in range(n) 一般仅仅用于循环n次,不用设置变量,用 _ 指代临时变量,只在这个语句中使用一次。
在循环中两者的作用相似。

 

t = int(input())
for _ in range(t):
    n = int(input())
    a = list(map(int, input().split()))
    z = a.count(0)
    sum_val = sum(a) + z
    if sum_val == 0:
        print(z + 1)
    else:
        print(z)

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值