蓝桥杯练习——成绩统计(精度计算)
题目描述
小蓝给学生们组织了一场考试,卷面总分为 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 }