首页 > 试题广场 >

平均年龄

[编程题]平均年龄
  • 热度指数:31448 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
已知某公司总人数为 W ,平均年龄为 Y 岁(每年 3 月末计算,同时每年 3 月初入职新人),假设每年离职率为 x , x > 0 && x < 1 ,每年保持所有员工总数不变进行招聘,新员工平均年龄 21 岁。
从今年 3 月末开始,请实现一个算法,可以计算出第 N 年后公司员工的平均年龄。(最后结果向上取整)。
数据范围:

输入描述:
输入W Y x N


输出描述:
输出第N年后的平均年龄
示例1

输入

5 5 0.2 3

输出

15
推荐
#include <iostream>
#include <cmath>

using namespace std;
void AverageAge()
{
    // 总人数为W,平均年龄为Y岁
    // 每年离职率为x,x>0&&x<1
    double W, Y, x, N;

    while(cin >> W >> Y >> x >> N)
    {
        while(N--)
        {
            Y = 21 * x + (1 - x) * (Y + 1);
        }

        cout << ceil(Y) << endl;
    }
}

int main()
{
    AverageAge();
    return 0;
}

编辑于 2016-04-06 10:50:52 回复(20)

math.ceil为向上取整函数

from math import ceil
while True:
    try:
        w, y, x, n = map(float, input().split())
        ave_age = y
        for i in range(int(n)):
            ave_age = (ave_age + 1) * (1 - x) + x * 21
        print(ceil(ave_age))
    except Exception:
        break
编辑于 2019-05-05 21:31:04 回复(0)
while True:
    try:
        para=list(input().split())
        W,Y,x,N=int(para[0]),int(para[1]),float(para[2]),int(para[3])
        for i in range(N):
            Y=Y+1#每年增加1岁
            total=Y*W*(1-x)+W*x*21#总年龄数
            Y=total/W#新的平均年龄
        print(int(Y)+1 if Y>int(Y) else int(Y))#有小数时向上取整,无则直接输出整数
    except:
        break

发表于 2018-07-30 16:59:56 回复(0)
# -*- coding: utf-8 -*-
import math
import sys
def average(W, Y, x, N):
    N = int(N)
    for i in range(0, N):
        # (新入职员工年龄总和 + 老员工年龄增长一年后总和) / 公司总人数
        Y = ((21 * (W * x)) + (((Y + 1) * W) * (1 - x))) / W
    # 向上取整
    Y = math.ceil(Y)
    print(int(Y))
def main():
    try:
        while True:
            # 输入公司人数W,平均年龄Y,离职率x,统计年数N(通过一行读取)
            W, Y, x, N = map(float, sys.stdin.readline().split())
            average(W, Y, x, N)
    except:
        pass
if __name__ == "__main__":
    main()

发表于 2017-03-14 14:29:25 回复(0)