od试题
- 日志采集
- TLV
日志采集
思路:
处理输入:
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-之前晚报的分数
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
TLV编码是按 Tag Length Value格式进行编码的一段码流中的信元用tag标识,tag在码流中唯一不重复length表示信元value的长度 value表示信元的值码流以某信元的tag开头 ,tag固定占一个字节length固定占两个字节,字节序为小端序现给定tlv格式编码的码流以及需要解码的信元tag请输出该信元的value输入码流的16机制字符中,不包括小写字母且要求输出的16进制字符串中也不要包含字符字母码流字符串的最大长度不超过50000个字输入描述第一行为第一个字符串 ,表示待解码信元的tag输入第二行为一个字符串, 表示待解码的16进制码流字节之间用空格分割输出描述输出一个字符串,表示待解码信元以16进制表示的value例子:输入:3132 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
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;}}}
}