平均年龄-美团笔试

已知某公司总人数为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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值