首页 > 试题广场 >

vivo智能手机产能

[编程题]vivo智能手机产能
  • 热度指数:6905 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
在vivo产线上,每位职工随着对手机加工流程认识的熟悉和经验的增加,日产量也会不断攀升。
假设第一天量产1台,接下来2天(即第二、三天)每天量产2件,接下来3天(即第四、五、六天)每天量产3件 ... ... 
以此类推,请编程计算出第n天总共可以量产的手机数量。



示例1

输入

11

输出

35

说明

第11天工人总共可以量产的手机数量

备注:
输入:n,代表第n天
输出:总的量产手机数量
n = int(input())
ans = 0
i = 1
while n>0:
    ans += i * min(i,n)
    n = n-i
    i = i+1
print(ans)

发表于 2020-07-09 16:49:48 回复(0)
class Solution:
    def solution(self, n):
        # 第一步
        x = math.ceil(math.sqrt(2 * n - 0.25) - 0.5)
        # 第二步
        res = 0
        for i in range(1, x):
            res += i * i
        # 第三步:
        tmp = n - ((1 + x - 1) * (x - 1) / 2)
        res += x * tmp
        return int(res)


第一步:求出是在哪个阶段 x
先计算出当前天数n是在第x个阶段,即11是在第5个阶段。
根据等差数列公式:n <= 1 + 2 + ... + x = (1 + x) * x / 2
求得:x >= sqrt(2 * n - 0.25) - 0.5,x向上取整求得结果

第二步:计算前 x - 1个阶段的产量

第三步:计算第x阶段的产量:(总天数-已用天数)*当前阶段 = ( n - ((1 + x - 1) * (x - 1)) / 2 ) * x

编辑于 2020-06-05 13:37:16 回复(0)
我觉得我第一次代码写这么挺简洁的


class Solution:
    def solution(self , n ):
        ans = 0
        i = 1
        while n - i > 0:
            ans += (i * i)
            n -= i
            i += 1
        ans += (i * n)
        return ans




编辑于 2020-04-12 22:29:23 回复(3)