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());
        }
    }
 }

#华为##笔试#
全部评论

相关推荐

5 26 评论
分享
牛客网
牛客企业服务