[编程题]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;
}
};
通过测试样例