描述
给定正整数 𝑛n 和阈值 𝑘k 以及长度为 𝑛n 的整数序列 {𝑎1,𝑎2,…,𝑎𝑛}{a1,a2,…,an}。
你需要动态地维护两个正整数变量 𝑆S 和 𝑐𝑛𝑡cnt,初始时,𝑆=𝑐𝑛𝑡=0S=cnt=0。
按照从 11 到 𝑛n 的顺序,对每个下标 𝑖i 执行:
∙ ∙若 𝑎𝑖≥𝑘ai≥k,则 𝑆←𝑆+𝑎𝑖S←S+ai;
∙ ∙若 𝑎𝑖=0ai=0 且 𝑆≥1S≥1,则 𝑆←𝑆−1S←S−1 且 𝑐𝑛𝑡←𝑐𝑛𝑡+1cnt←cnt+1;
∙ ∙否则,不进行任何操作。
输出最终 𝑐𝑛𝑡cnt 的值。输入描述:
第一行输入一个整数 𝑇(1≦𝑇≦104)T(1≦T≦104),表示测试用例组数。
每组测试用例格式如下:
1. 1.第一行输入两个整数 𝑛,𝑘 (1≦𝑛≦50; 1≦𝑘≦100)n,k (1≦n≦50; 1≦k≦100);
2. 2.第二行输入 𝑛n 个整数 𝑎1,𝑎2,…,𝑎𝑛 (0≦𝑎𝑖≦100)a1,a2,…,an (0≦ai≦100).输出描述:
对于每组测试用例,输出一行一个整数,表示 𝑐𝑛𝑡cnt 的值。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 创建Scanner对象用于读取输入
Scanner scanner = new Scanner(System.in);
// 读取测试用例数量T
int T = scanner.nextInt();
// 处理每组测试用例
for (int t = 0; t < T; t++) {
// 读取n(序列长度)和k(阈值)
int n = scanner.nextInt();
int k = scanner.nextInt();
// 读取序列中的n个整数
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = scanner.nextInt();
}
// 初始化变量:S表示积累的资源,cnt表示成功消耗资源的次数
int S = 0;
int cnt = 0;
// 增强型for循环按顺序处理序列中的每个元素
//专门用于遍历数组或集合中的元素
for (int num:a) { //num依次代表数组a中的每个元素
// 情况1:当前元素大于等于阈值k,积累资源到S中
if (num >= k) {
S += num;
}
// 情况2:当前元素是0,且有资源可以消耗(S>=1)
else if (num == 0 && S >= 1) {
S--; // 消耗1单位资源
cnt++; // 记录一次成功消耗
}
// 其他情况:不做任何操作
}
// 输出当前测试用例的结果
System.out.println(cnt);
}
// 关闭Scanner
scanner.close();
}
}
1097

被折叠的 条评论
为什么被折叠?



