Задача:
Для положительного целого числа n определим функцию f:
f(n) = - 1 + 2 - 3 + .. + ( - 1)^n*n
Посчитать f(n) для данного целого числа n.
Написал сначала через for превысил лимит времени:
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
int sum(0), n;
cin >> n;
for (int i(1); i <= n; ++i)
sum += pow(-1, i)*i;
cout << sum;
system("pause");
return 0;
}
Затем с рекурсией превысило ограничение по памяти:
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int n, sum(0), i(1);
void rek()
{
while (i <= n)
{
sum += pow(-1, i)*i;
++i;
rek();
}
}
int main()
{
cin >> n;
rek();
cout << sum;
system("pause");
return 0;
}
Помогите оптимизировать код (на тесте n = 1000000000).
А просто подумать? Что каждая пара дает число 1?
Так что в результате получается
(-1 + (-1)^n + 2*n*(-1)^n)/4
Ну, а код
int main()
{
int n;
cin >> n;
cout << ((2*n+1)*((n%2) ? -1 : 1) - 1)/4 << endl;
}
Продвижение своими сайтами как стратегия роста и независимости