题解 | #平均年龄#
平均年龄
http://www.nowcoder.com/practice/3745638815d04c26babcfc463c25478c
从数学角度来说这题不是什么难题。但是这题要通过所有test cases的话有几个细节需要注意:
- 一个test case可能有多组数据,一行表示一组。
- 新员工的人数是用总员工乘以离职率。不需要取整。
- 例如:如果总员工99人,离职率10%,则离职人数为9.9人,不是9人也不是10人。
- 总的年龄是:(员工总数 - 新员工的人数) × 原有的公司平均年龄 + 新员工的人数 × 新员工平均年龄。不需要取整。
- 此处假设未离职的员工平均年龄和原有所有员工的平均年龄相等。
- 每过一年,原有的公司平均年龄要+1。
- 每一年新的平均年龄是:总年龄 / 员工总数。不需要取整。
- 直到最后一步,如果算出来不是整数的才往上取整。
完整代码如下:
import java.lang.*;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
final int numTotalWorkers = sc.nextInt();
float avgAge = sc.nextInt();
final float departRate = sc.nextFloat();
final int numYearsAfter = sc.nextInt();
final int newWorkersAvgAge = 21;
for (int year = 1; year <= numYearsAfter; ++year) {
avgAge = getNextYearAvgAge(numTotalWorkers, avgAge, departRate,
newWorkersAvgAge);
}
System.out.println((int)Math.ceil(avgAge));
sc.nextLine();
}
sc.close();
}
private static float getNextYearAvgAge(final int numTotalWorkers,
float avgAge,
final float departRate,
final int newWorkersAvgAge) {
// note: does NOT need to round to nearest integer
// otherwise it cannot pass the OJ system
float numNewWorkers = numTotalWorkers * departRate;
avgAge += 1;
float totalAge = (numTotalWorkers - numNewWorkers) * avgAge
+ numNewWorkers * newWorkersAvgAge;
avgAge = totalAge / numTotalWorkers;
return avgAge;
}
}
查看23道真题和解析