这题考的是计算除法后得到的小数点,笔者通过这篇文章了解了计算除法小数点的计算技巧:Java 整数间的除法运算如何保留所有小数位? - Marydon - 博客园
用 float 或 double 除 int 就可以得到除法后的小数点了,然后再乘 1000 取余 10 获得第一位小数的整型值(remainder),之后再判断 remainder 是否大于等于 5。
代码:
public class scoreAnalysis {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int memberNum = input.nextInt();
int[] stuScore = new int[memberNum];
//将所有分数存入数组
for(int i = 0; i < memberNum; ++i){
int score = input.nextInt();
stuScore[i] = score;
}
passRate(stuScore, memberNum);
greatRate(stuScore, memberNum);
// float i = (3f / 7) * 1000 % 10;
// int res = (int)i;
// System.out.println(res);
}
//计算及格率 = 及格人数 / 总人数
private static void passRate(int[] stuScore, int memberNum){
float passNum = 0;
for(int i = 0; i < stuScore.length; ++i)
if(stuScore[i] >= 60)
++passNum;
//计算出及格率
int rate = (int)passNum * 100 / memberNum;
//判断余数
float remainder = passNum / memberNum * 1000 % 10;
if(remainder >= 5.0)
++rate;
System.out.println(rate + "%");
}
//计算优秀率 = 优秀人数 / 总人数
private static void greatRate(int[] stuScore, int memberNum){
float greatNum = 0;
for(int i = 0; i < stuScore.length; ++i)
if(stuScore[i] >= 85)
++greatNum;
//计算出优秀率
int rate = (int)greatNum * 100 / memberNum;
//判断余数
float remainder = greatNum / memberNum * 1000 % 10;
if(remainder >= 5.0)
++rate;
System.out.println(rate + "%");
}
}