日志采集是运维系统的核心组件。日志按行生成,每行记做一条,由采集系统分批上报。 为此,项目组设计了如下的上报策略: 1、每成功上报一条日志,奖励1分 2、每条日志每延迟上报1秒,扣1分 3、积累日志达到100条,必须立即上报 给出日志序列,根据该规则,计算首次上报能获得的最多积分数,使用java代码编写 输入描述:按时序产生的日志条数T1,T2...Tn,其中1<=n<=1000,0<=Ti<=100 输出描述:首次上报最多能获得的积分数 示例 输入: 1 98 1 输出: 98 说明: 采集系统第2个时刻上报,可获得最大积分(98+1)-1=98 示例 输入: 50 60 1 输出: 50 说明: 如果第1个时刻上报,获得积分50.如果第2个时刻上报,最多上报100条,前50条延迟上报1s,每条扣除1分,共获得积分为100-50 = 50
时间: 2023-05-15 20:04:48 浏览: 116
日志信息采集
以下是Java代码实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] logs = new int[n];
for (int i = 0; i < n; i++) {
logs[i] = scanner.nextInt();
}
int score = 0;
int delay = 0;
for (int i = 0; i < n; i++) {
if (logs[i] == 0) {
delay++;
} else {
score += logs[i] - delay;
delay = 0;
}
if (i == n - 1 && delay > 0) {
score -= delay;
}
if (score < 0) {
score = 0;
}
}
System.out.println(score);
}
}
解释一下代码的实现思路:
首先读入日志序列,然后遍历序列,对于每条日志,如果它是0,说明延迟了1秒,将延迟计数器加1;如果它不是0,说明上报了一条日志,将该条日志的得分加上它的序号减去延迟计数器的值,然后将延迟计数器清零。如果遍历到序列的最后一个元素,且延迟计数器的值大于0,说明还有一些日志没有上报,将得分减去延迟计数器的值。最后,如果得分小于0,将得分设为0。
阅读全文