1049 数列的片段和 (20分)
第一个方法测试点2,3超时,太简单粗暴了,但是最好理解。o(n3)
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
int sum = 0; float all = 0;
cin >> sum;
vector<float> s;
for (int i = 0; i < sum; i++)
{
float f;
cin>>f;
s.push_back(f);
}
for (int i = 0; i < sum; i++)//总体
{
int flag = 1;
for (int i1 = i; i1 < sum ; i1++)//(0.1)-(0.2)之间的逻辑
{
for (int j = i; j < i+flag; j++)//每个小括号之间的逻辑
{
all += s[j];
//cout << s[j] << endl;
}
flag++;
}
}
printf("%.2f",all);
return 0;
}
后来发现可以直接使用递推关系。o(n)
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
int num;
double sum = 0;
double array[100000];
cin >> num;
for (int i = 0; i < num; i++)
cin >> array[i];
for (int i = 0; i < num; i++) {
sum += array[i] * (num - i) * (i + 1);
}
printf("%.2f", sum);
cout << endl;
system("pause");
return 0;
}