24.4.10华为笔试题
参考https://blog.csdn.net/weixin_44752577/article/details/137632996?spm=1001.2014.3001.5502
第一题
计算话费
每条记录包括 时间戳、客户标识、计费因子、计费时长,要求记录中同一客户同一计费因子在相同时间戳上只能计费一次,选择第一次记录的数据,计算每个用户的总费用
输入
第1行 表示数据的条数n
n行数据记录
第n+1行 计费因子个数m
m行计费因子
输出
客户以及对应的话单总费用,按客户标识字典序升序排序
import java.util.*; /** * @author Joey * @version 1.0 */ public class First { public static void main(String[] args) { // please define the JAVA input here. For example: Scanner s = new Scanner(System.in); Scanner in = new Scanner(System.in); int N = Integer.parseInt(in.nextLine()); String[][] records = new String[N][]; for (int i = 0; i < N; i++) { records[i] = in.nextLine().split(","); //System.out.println(Arrays.toString(records[i])); } int n = Integer.parseInt(in.nextLine()); Map<String, Integer> factor = new HashMap<>(); for (int i = 0; i < n; i++) { String[] factors = in.nextLine().split(","); //System.out.println(Arrays.toString(factors)); factor.put(factors[0], Integer.parseInt(factors[1])); } //System.out.println(factor.toString()); // please finish the function body here. //遍历一次数据即可 //存放记录 Set<String> set = new HashSet<>(); //存放结果 Map<String, Integer> result = new TreeMap(); for (String[] record : records) { //首先查看是否有同样记录存在,如果存在跳过 String key = record[0] + record[1] + record[2]; if (set.contains(key)) continue; set.add(key); //将记录放进set //未有相同记录,判断计费时长是否合法,并计算当前记录总费用 Integer time = Integer.parseInt(record[3]); if (time < 0 || time > 100) time = 0; Integer total = time == 0 ? 0 : time * factor.getOrDefault(record[2], 0); result.put(record[1], result.getOrDefault(record[1], 0) + total); } //System.out.println(result.toString()); // please define the JAVA output here. For example: System.out.println(s.nextInt()); Iterator<Map.Entry<String, Integer>> iterator = result.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, Integer> next = iterator.next(); System.out.println(next.getKey() + "," + next.getValue()); } } }#华为##笔试#