首页 > 技术文章 > 蓝桥杯练习——成绩统计(精度计算)

pengsay 2021-03-19 22:25 原文

题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。
输入描述
输入的第一行包含一个整数 n (1≤n≤10^4),表示考试人数。
接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分 四舍五入保留整数。
输入输出样例
示例
输入
7
80
92
56
74
88
100
0
输出
71%
43%
运行限制
    最大运行时间:1s
    最大运行内存: 256M

 

这道题本身并不难,就是要利用BigDecimal类中的一些方法来处理小数

1、BigDecimal.ROUND_HALF_UP ——》四舍五入
2、public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 第二个参数 scale 表示保留几位小数

 

AC代码:

 1 public class GradeSum {
 2     public static void main(String[] args) {
 3         Scanner input = new Scanner(System.in);
 4         int n = input.nextInt();
 5         int[] arr = new int[n];
 6         for (int i = 0; i < n; i++) {
 7             arr[i] = input.nextInt();
 8         }
 9 
10         int[] result = get(arr);
11         System.out.println(result[0] + "%");
12         System.out.println(result[1] + "%");
13     }
14 
15     public static int[] get(int[] arr) {
16         int[] dp = new int[2];
17         BigDecimal pass = new BigDecimal(0);
18         BigDecimal great = new BigDecimal(0);
19         for (int i = 0; i < arr.length; i++) {
20             if (arr[i] >= 60) {
21                 pass = pass.add(BigDecimal.valueOf(1));
22                 if (arr[i] >= 85) {
23                     great = great.add(BigDecimal.valueOf(1));
24                 }
25             }
26         }
27 
28         // 计算及格率和优秀率
29         // BigDecimal.ROUND_HALF_UP ——》四舍五入
30         // public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 第二个参数 scale 表示保留几位小数
31         pass = pass.divide(BigDecimal.valueOf(arr.length), 2,  BigDecimal.ROUND_HALF_UP);
32         great = great.divide(BigDecimal.valueOf(arr.length), 2, BigDecimal.ROUND_HALF_UP);
33         pass = pass.multiply(BigDecimal.valueOf(100));
34         great = great.multiply(BigDecimal.valueOf(100));
35         dp[0] = pass.intValue();
36         dp[1] = great.intValue();
37         return dp;
38     }
39 }

推荐阅读