2020.8.8 美团笔试

1. 计算器

输入:5个数字,为1-5星评价数量
输出:平均评价星级(截尾法保留一位小数)
如:
输入:1 1 2 2 2
输出:3.3

import java.text.DecimalFormat;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int sumCounts = 0;
        double sumStars = 0;
        for (int i = 0; i < 5; i++) {
            int temp = in.nextInt();
            //计算总星级与总评价数量
            sumStars += temp*(i+1);
            sumCounts += temp;
        }
        double score = sumStars/sumCounts;
        //四舍五入两位小数
        DecimalFormat df = new DecimalFormat("#.00");
        //截取前三个字符并输出
        System.out.print(df.format(score).substring(0, 3));
    }
}

2. 使用优惠券

输入:第一个数n为优惠券数量,下面n行输入x y,意为满x减y的优惠券。
输出:最多能买价值多少的外卖 花最少的钱
(每份订单只能使用一个优惠券;1-2的优惠券不返钱,只能买东西;设任何价格都有相应的外卖可买)
如:
输入:3
5 3
10 5
1 2
输出:17 7

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //优惠券数量
        int num_cash = in.nextInt();
        int sumValue = 0;
        int sumPay = 0;
        for (int i = 0; i < num_cash; i++) {
        	//该优惠券能卖价值多少的东西
            int value = in.nextInt();
            //该优惠券能省多少钱
            int free =  in.nextInt();
            if (free>value){
            //如果是类似1-2的优惠券则只加总价值,无开销
            //如1-2,用户可一分钱不花,买到两块钱的外卖
                sumValue+=free;
            }else{
            //如果是正常优惠券则正常计算总价值和总支出
                sumValue += value;
                sumPay += value-free;
            }
        }
        System.out.println(sumValue + " " + sumPay);
    }
}

3. 送花

(花店在1,目的地位于2…n-1;绩效使用实际跑路距离/总距离计算;到最后一个点后不必计算回花店的距离;假设骑手一次性取了所有花,不必每送一次就回一次花店;为简化题意,假设所有节点组成一个树,即所给的n个点最多只有n-1条边)
输入:花店及目的地地点数量n,下面输入n行x y z分别为起始点,终点,距离
(1<=n<=300)
输出:实际跑路距离
未能AC…

4. 奖励金

(合并优惠券,{1, 1, 1, ,1 ,1}合并成{1, 2, 2}再变成{1, 3},每合并一次加一个奖励金,求如何最大化奖励金)
输入:n优惠券个数,下面N个数字为奖励金面额
(1<=面额<=100)
输出:最大奖励金

import java.util.LinkedList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num_cash = in.nextInt();
        LinkedList<Integer> stack = new LinkedList<>();
        int ans = 0;
        //设置边界值,防止空指针
        stack.push(-1);
        for (int i = 0; i < num_cash; i++) {
            int end = in.nextInt();
            int pre = stack.peek();
            //如果可以合并则进入循环
            while (pre == end) {
               end++;
               ans++;
               stack.poll();
               pre = stack.peek();
            }
            stack.push(end);
        }
        System.out.println(ans);
    }
}

5.最小元素出队次数

要求每次出队的数如果未最小元素则正常出队,否则再次入队。
题目要求输出:假如所有元素按要求出队至队空,出队操作的次数
输入:元素个数n,与现有元素队列顺序
(1<=n<=30000)
输出:出队操作的次数
如输入:5
6 4 2 1 3
输出:12

未能AC…

猜你喜欢

转载自blog.csdn.net/qq_45254908/article/details/107890291