od试题
日志采集
思路:
处理输入:
Scanner 拿到整个输入
放入string[] 按照" "分隔
调用Integer.parseInt 将string转int类型
解题:
用一个变量count记录当前日志数量,初始为输入的第一个参数
用一个max变量 记录最大积分,初始为输入的第一个参数
判断如果count大于100 输出100
(第一条日志就大于100 必须立刻上报 当前分数也是100)
for循环i
count等于之前count+第i个数字 如果count大于100 比较之前的max和100-之前晚报的分数(封函数 计算方法 core=0 for循环输入数组j到i 每次的core等于之前的core+这个数字乘i和j的距离)
else不大于100 比较max和count-之前晚报的分数
java
public class Main13 {
public static int[] ints;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] split = sc.nextLine().split(" ");
ints = new int[split.length];
for (int i = 0; i < split.length; i++) {
ints[i] = Integer.parseInt(split[i]);
}
//记录日志总数
int count = ints[0];
//最大积分
int max = ints[0];
if (count > 100) {
System.out.println("100");
} else {
for (int i = 1; i < ints.length; i++) {
count += ints[i];
if (count > 100) {
max = Math.max(max, 100 - jisuan(i));
break;
}else {
max = Math.max(max, count - jisuan(i));
}
}
}
System.out.println(max);
}
public static int jisuan(int index) {
int core = 0;
for (int i = 0; i < index; i++) {
core += ints[i] * (index - i);
}
return core;
}
}
TLV
css
TLV编码是按 Tag Length Value格式进行编码的一段码流中的信元用tag标识,tag在码流中唯一不重复
length表示信元value的长度 value表示信元的值
码流以某信元的tag开头 ,tag固定占一个字节
length固定占两个字节,字节序为小端序
现给定tlv格式编码的码流以及需要解码的信元tag
请输出该信元的value
输入码流的16机制字符中,不包括小写字母
且要求输出的16进制字符串中也不要包含字符字母
码流字符串的最大长度不超过50000个字
输入描述
第一行为第一个字符串 ,表示待解码信元的tag
输入第二行为一个字符串, 表示待解码的16进制码流
字节之间用空格分割
输出描述
输出一个字符串,表示待解码信元以16进制表示的value
例子:
输入:
31
32 01 00 AE 90 02 00 01 02 30 03 00 AB 32 31 31 02 00 32 33 33 01 00 CC
输出
32 33
说明:
需要解析的信源的tag是31
从码流的起始处开始匹配,tag为32的信元长度为1(01 00,小端序表示为1)
第二个信元的tag为90 其长度为2
第三个信元的tag为30 其长度为3
第四个信元的tag为31 其长度为2(02 00)
所以返回长度后面的两个字节即可 为 32 33
c
import java.util.*;
public class Test4 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String tag = sc.nextLine();
String[] split = sc.nextLine().split("\\s+");
for(int i=0; i<split.length; ){
int len = Integer.parseInt(split[i+2]+split[i+1],16);
if(tag.equals(split[i])){
StringBuilder bu = new StringBuilder();
for(int j=i+3; j<i+3+len;j++){
bu.append(split[j]).append(" ");
}
System.out.println(bu.toString());
break;
}
else{
i+=len+3;
}
}
}
}