Для вас нужно подсчитать сумму S(n) = 1 - 2 + 3
Для вас нужно подсчитать сумму S(n) = 1 - 2 + 3 - 4 + + (-1)n+1 *n. Напишите программку, которая обретает ответ за малое время и употребляет меньший объем оперативной памяти.
Входные данные: одно целое число n (1 n 109)
Выходные данные: ответ S(n)
1 ответ
Шаер
Семён
Если следовать алгоритму вычисления, представленному в формуле, то программа будет такая:
var
n,i,s: shortint ;
begin
write ('N=');
readln (n);
s:=0;
for i:=1 to n do
if i mod 2 =0
then s:=s-i
else s:=s+i;
print (s)
end.
Если же поглядеть на формулу пристально и выявить закономерность, то можно увидеть, что
1) вычитаются только четные числа. И после каждого вычитания итог равен ровно половине вычитаемого числа (со знаком минус)
2) прибавляются только нечетные числа И прибавление идет вослед за вычитанием (кроме 1), т.е. можно к результату заключительного вычитания (см.п.1) просто прибавить N.
Также учитываем, что целые числа занимают меньше памяти, чем вещественные, поэтому для программки используем самый маленький целый тип с отрицательными значениями shortint (от -128 до 127, что в данном случае нас полностью устраивает).
Помним, что значение переменной целого типа не может быть результатом деления, потому заместо обыденного дробления используем дробление нацело (N div 2)
Итак:При нечетном N итог = -N div 2,
При четном N: (так как у нас целочисленное разделенье, то N div 2 будет одинаково (N-1) div 2) итог будет = -(N div 2) + N либо N-(N div 2)
Т.е. вся программка сведена всего к двум операциям по различным веткам условного оператора, что сделает ее быстрее и экономичнее. К тому же не надобно выделять память для переменной-счетчика.
var
n,s: shortint;
begin
write ('N=');
readln (n);
if n mod 2 =0
then s:=-n div 2
else s:=n-(n div 2);
print (s)
end.
Можно увидеть и иную закономерность, что каждое сложение и идущее за ним вычитание дают одинаковый итог с различными знаками, т.е. при четном N также s=-N div 2, а при нечетном - s=N div 2+1. Но великий разницы это не даст.
var
n,i,s: shortint ;
begin
write ('N=');
readln (n);
s:=0;
for i:=1 to n do
if i mod 2 =0
then s:=s-i
else s:=s+i;
print (s)
end.
Если же поглядеть на формулу пристально и выявить закономерность, то можно увидеть, что
1) вычитаются только четные числа. И после каждого вычитания итог равен ровно половине вычитаемого числа (со знаком минус)
2) прибавляются только нечетные числа И прибавление идет вослед за вычитанием (кроме 1), т.е. можно к результату заключительного вычитания (см.п.1) просто прибавить N.
Также учитываем, что целые числа занимают меньше памяти, чем вещественные, поэтому для программки используем самый маленький целый тип с отрицательными значениями shortint (от -128 до 127, что в данном случае нас полностью устраивает).
Помним, что значение переменной целого типа не может быть результатом деления, потому заместо обыденного дробления используем дробление нацело (N div 2)
Итак:При нечетном N итог = -N div 2,
При четном N: (так как у нас целочисленное разделенье, то N div 2 будет одинаково (N-1) div 2) итог будет = -(N div 2) + N либо N-(N div 2)
Т.е. вся программка сведена всего к двум операциям по различным веткам условного оператора, что сделает ее быстрее и экономичнее. К тому же не надобно выделять память для переменной-счетчика.
var
n,s: shortint;
begin
write ('N=');
readln (n);
if n mod 2 =0
then s:=-n div 2
else s:=n-(n div 2);
print (s)
end.
Можно увидеть и иную закономерность, что каждое сложение и идущее за ним вычитание дают одинаковый итог с различными знаками, т.е. при четном N также s=-N div 2, а при нечетном - s=N div 2+1. Но великий разницы это не даст.
Сашок Валенюк
Спасибо)
Ромка
Хм... до такого, не зная, и не додумаешься. Спасибо)
Павел Самкотрясов
Не доводилось. Я вообщем не профи совершенно никак
Воспресов
Толя
спасибо большое)
, оставишь ответ?
Похожие вопросы
-
Вопросы ответы
Новое
NEW
Статьи
Информатика
Статьи
Последние вопросы
Игорь 14 лет назад был на 8 лет моложе, чем его
Математика.
Два тела массами m1 и m2 находящие на расстоянии R друг
Физика.
В сосуде 4целых одна пятая литр воды что бы заполнить сосуд
Математика.
Двум малярам Диме И Олегу поручили выкрасить фасад дома они разделили
Разные вопросы.
найти порядковый номер 41Э если в ядре 20 нейтронов
Разные вопросы.
в ряду натуральных чисел 3, 8, 10, 24, … 18 одно
Математика.
Предприятие по производству с/хоз продукции на производство затратило 3527000 руб Валовый
Разные вопросы.
Математика, задано на каникулы. ВАРИАНТ 1004
НОМЕР 1,2,3,4,5,6,7,8.
Математика.
Имеются три конденсатора емкостью С1=1мкФ, С2=2мкФ и С3=3мкФ. Какую наименьшую емкость
Физика.
Из точки м выходят 3 луча MP MN и MK причём
Геометрия.
Облако тегов