平均年龄-美团笔试

来源:互联网 发布:ubuntu terminator 编辑:程序博客网 时间:2024/05/19 21:42

已知某公司总人数为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);    }}
0 0
原创粉丝点击