Как ограничить время выполнения программы? - C (СИ)
Формулировка задачи:
Добрый день!
Задали написать программу, следующего содержания:
"Для натурального числа сумма знакопеременного натурального ряда до числа n определяется:
Сумма=-1+2-3+...+n*(-1)^n
Найдите сумму для данного натурального числа n.
Во входном файле записано натуральное число n (1 <= n <= 10^15). Вывести результат-найденную сумму."
При этом существует важное ограничение в условии:"Ограничение по времени на тест 1 seconds (ограничение по памяти на тест 64 megabytes)"
Я написал работающую программку:
но время её выполнения порядка 4-5 секунд при больших значениях n. Я так понимаю упрощение предполагает под собой избавление от цикла, но я не имею понятия как это осуществить. Прошу помощи!
Заранее Спасибо!
#include <stdio.h>
#include <stdlib.h>
int main()
{
long long s, n;
int i, p;
FILE *inf;
inf = fopen("input.txt", "rt" );
fscanf(inf, " %lli", &n);
s=0;
p=1;
for(i=1; i<=n; i++)
{
p=-p;
s+=p*i;
}
printf("%lli\n", s);
return 0;
}Решение задачи: «Как ограничить время выполнения программы?»
textual
Листинг программы
#include <stdio.h>
int main()
{
long long n;
FILE *inf = fopen("input.txt", "rt");
fscanf(inf, "%lli", &n);
if(n % 2)
printf("%lli\n", (n - 1) / 2 - n);
else
printf("%lli\n", n / 2);
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Включаются необходимые заголовочные файлы:
stdio.h - Объявляется функция
main(), которая является точкой входа в программу. - Переменная
nтипаlong longинициализируется значением, считываемым из файлаinput.txt. - Производится проверка на четность числа
n: если оно нечетное, то выполняется одно действие, если четное - другое. - Выполняется действие, соответствующее четности или нечетности числа
n. - Выводится результат на экран.
- Функция
main()возвращает 0, что означает успешное завершение работы программы.