题目链接:1.小蓝和小桥的挑战 - 蓝桥云课 (lanqiao.cn)
一些简单的算法思路,不用去考虑数组的所有数值,只要看总价值之和和乘积即可,唯一需要去考虑的就是数组中是否会遇见0,一旦能遇见0,就说明乘积会为0,要加一次操作(不用去考虑加在谁身上)。价值之和也是一样,只需要看在判断一遍数组,确定数组中没有0的存在之后,计算此时的数组的和,如果和为0,就加一次操作(同样不考虑加在谁身上,只要和不为0 就可以)。
程序代码:
package lanqiao;
import java.util.Scanner;
/**
* 2023/11/29
*/
public class lanqiao3238_小蓝和小桥的挑战 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int t=scan.nextInt();//测试用例数量
while (t-->0){
int n=scan.nextInt();//物品数目
int[] arr=new int[n];//物品初始价值
int sum=0;//序列价值之和
int ans=0;//操作次数
for (int i=0;i<n;i++) {
arr[i] = scan.nextInt();
sum+=arr[i];
if (arr[i]==0){//只要序列中有0,价值的积都为0,所以只要遇见0,价值就加1
ans++;
}
}
if (sum+ans==0)//初始价值之和要加上遇见0时操作的次数,得出的是更新后的新价值之和
ans++;//如果新价值之和为0,则还需操作一次
System.out.println("需要操作至少 "+ans+" 次");
}
}
}
运行结果:
2
2
0 0
需要操作至少 2 次
3
-1 0 1
需要操作至少 1 次
进程已结束,退出代码为 0