vivo2020届春季校园招聘在线编程考试 [编程题]vivo智能手机产能 C++实现

[编程题]vivo智能手机产能
时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 256M,其他语言512M

在vivo产线上,每位职工随着对手机加工流程认识的熟悉和经验的增加,日产量也会不断攀升。
假设第一天量产1台,接下来2天(即第二、三天)每天量产2件,接下来3天(即第四、五、六天)每天量产3件 … …
以此类推,请编程计算出第n天总共可以量产的手机数量。

输入例子1:
11

输出例子1:
35

例子说明1:
第11天工人总共可以量产的手机数量

算法思想,通过等差数列求和公式来优化时间复杂度,本题时间复杂度为O(n)空间复杂度为O(1)

#include<iostream>
using namespace std;
/*在vivo产线上,每位职工随着对手机加工流程认识的熟悉和经验的增加,日产量也会不断攀升。
假设第一天量产1台,接下来2天(即第二、三天)每天量产2件,接下来3天(即第四、五、六天)每天量产3件 ... ... 
以此类推,请编程计算出第n天总共可以量产的手机数量。*/
int m = 1;
int sum = 0;

int findnum(int i)
{
    return (i * (i + 1)) / 2;  //等差数列求和公式的简化(首项为1公差为1)
}
int fun(int n)
{
    int x = 0;
    for ( int i = 0; i < n ;i++)
    {
        if(findnum(i)>n)
        {
            x = i - 1;
            break;
        }
    }
    int sum = 0;
    for (int k = 1; k <= x;k++)
    {
        sum += k * k;  //计算多少台(满  例如 连续三天生产三台,如没有连续4天生产4台 则只计算到每天生产3台)
    }
    sum = sum + (n - findnum(x)) * (x + 1);//算上剩下的加工台数
    return sum;
}
//测试
int main()
{
    cout << fun(11);
    return 0;
}

牛客提交

class Solution {
public:
    /**
     * 输入一个整形数值,返回一个整形值
     * @param n int整型 n>9
     * @return int整型
     */
    int m = 1;
    int sum = 0;

    int findnum(int i)
    {
        return (i * (i + 1)) / 2;  //等差数列求和公式的简化(首项为1公差为1)
    }

    int solution(int n) {
        // write code here
        int x = 0;
        for ( int i = 0; i < n ;i++)
        {
            if(findnum(i)>n)
            {
                x = i - 1;
                break;
            }
        }
        int sum = 0;
        for (int k = 1; k <= x;k++)
        {
            sum += k * k;  //计算多少台(满  例如 连续三天生产三台,如没有连续4天生产4台 则只计算到每天生产3台)
        }
        sum = sum + (n - findnum(x)) * (x + 1);//算上剩下的加工台数
        return sum;
    }
};

通过测试样例
在这里插入图片描述

发布了16 篇原创文章 · 获赞 3 · 访问量 521

猜你喜欢

转载自blog.csdn.net/weixin_43381566/article/details/105463927