您的位置:首页 > 其它

平均年龄-美团笔试

2016-04-13 11:14 141 查看
已知某公司总人数为W,平均年龄为Y岁(每年3月末计算,同时每年3月初入职新人),假设每年离职率为x,x>0&&x<1,每年保持所有员工总数不变进行招聘,新员工平均年龄21岁。

从今年3月末开始,请实现一个算法,可以计算出第N年后公司员工的平均年龄。(结果向上取整)。

输入:输入W Y x N

输出:平均年龄。

思路:这道题比较简单,利用数学思维做,时间复杂度为O(n),空间复杂度为O(1),具体做法计算从第一年到第N年的就可以了。题目已经给定新员工每年的年龄平均都是21岁,并且招聘的人数和离职的一样。所以可以得到如下公式:

y = 21*x+(1-x)*(y+1);


等式左边的y是当年平均年龄,右边的y是上一年所以要加1,x是离职率和入职率,21*x可以得到新员工的年龄平均率。

有上面的思路,写出代码如下:

package company;

import java.util.Scanner;

/**
* 已知某公司总人数为W,平均年龄为Y岁(每年3月末计算,同时每年3月初入职新人),假设每年离职率为x,x>0&&x<1,
* 每年保持所有员工总数不变进行招聘,新员工平均年龄21岁。
从今年3月末开始,请实现一个算法,可以计算出第N年后公司员工的平均年龄。(结果向上取整)。
* Created by lizhaoz on 2016/4/13.
*/

public class Avgage {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
int W=scanner.nextInt();
int Y=scanner.nextInt();
double x=scanner.nextDouble();
int N=scanner.nextInt();
int end=age(Y,x,N);
System.out.println(end);
}
}

private static int age(double y, double x, int n) {
for(int i = 1;i<=n;i++){
y = 21*x+(1-x)*(y+1);
}
return (int)Math.ceil(y);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: