首页 > 试题广场 >

小美的评分计算器

[编程题]小美的评分计算器
  • 热度指数:4123 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

美团对于商家的评价体系是1-5星评价体系,用户在完成订单之后可以对商家打1/2/3/4/5星,而在客户端上,商家的评级却不一定是整数,而是会显示小数点后的一位。很显然这就需要一个计算器了,小美拥有了一些商户的评价数据,希望可以计算出商家在客户端上显示出的评分。

这个评分的计算非常简单,就是对该商家的所有客户的星级评价做求一个平均,然后去尾法显示小数点后的一位即可,例如平均得分是3.55,则显示的是3.5。例如某商家获得了1-5星评价各一个,则显示的评分是(1+2+3+4+5)/5=3.0

如果商家没有获得评价,则显示0.0


输入描述:
输入包含5个整数,依次分别表示商家获得1星到5星的评价数量,每一种评价的数量都不大于1000。


输出描述:
输出仅包含一个保留一位的小数,表示商家在客户端上显示的评级。
示例1

输入

2 2 1 1 2

输出

2.8
Java:题目最大的难点就是如何实现去尾法,提供两种思路
(1)先乘再除,利用floor函数达到去尾目的;
(2)利用BigDecimal类的setScale方法,通过设置ROUND_DOWN关键字实现去尾。
import java.util.Scanner;
import java.math.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int sum = 0;
        int num = 0;
        int arr[] = new int[5];
        int i = 0;
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            arr[i] = in.nextInt();
            i++;
        }

        for(int j = 0; j < 5; j++)
        {
            sum += ( j + 1) * arr[j];
            num += arr[j];
        }
        double ans = (double)sum / num;
        // BigDecimal b = new BigDecimal(ans);
        // ans = b.setScale(1, BigDecimal.ROUND_DOWN).doubleValue();  
        ans = (double) Math.floor(ans * 10) / 10;

        System.out.printf("%.1f", ans);
    }
}


发表于 2023-04-20 00:38:44 回复(0)