PASCAL Требуется посчитать сумму целых чисел, расположенных между числами 1 и N...

0 голосов
376 просмотров

PASCAL

Требуется посчитать сумму целых чисел, расположенных между числами 1 и N включительно.

Входные данные

В единственной строке входного файла INPUT.TXT записано единственное целое число N, не превышающее по абсолютной величине 10^4.
Выходные данные

В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — сумму чисел, расположенных между 1 и N включительно.

МОЁ РЕШЕНИЕ:

var n, i, s, z: longint;

begin
assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);
z:=0;
s:=0;
read(n); begin
if n<=z then <br> exit;
end;
for i := 1 to n do s+=i;
write(s);

end.

Но код не принимает система, что может быть не так? PS://

Но сложность этой задачи не в вычислении этой суммы и приведенный выше алгоритм не проходит на третьем тесте! Оказывается, здесь очень внимательно нужно прочитать условия задачи, особенно ограничения на число N. Дело в том, что это число может быть отрицательным!!! Учитывая это попробуйте самостоятельно доработать и реализовать верный алгоритм решения этой задачи.

UPD: забыл условие поставить,что n не должно превышать 10^4

UPD2:
исправил ошибки, учёл что n<10000, но все равно "задача решена неверно" <br>КОД:

var n, i, s, z: longint;

begin
assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);
z:=0;
s:=0;
read(n); begin
if n<=z then <br> exit;
end;
if n<=10000 then<br> for i := 1 to n do s+=i
else exit;
write(s);
end.


Информатика (15 баллов) | 376 просмотров
0

Лишнее

0

между числами 1 и N включительно.

0

Условие читайте

0

я просто всегда с массивами или матрицами работаю

0

Это ведь не правильно, особенно в FP где массив это доп. место в памяти

0

хотя нет там не нужен массив , там просто пока i <>n где и растет или прибавляется

0

while i <> n do begin if i < n then i++ else i--

0

Верно, только в ФП нет инкрементов

0

и декремента тоже

0

Хотя я вообще не уверен что это на ФП

Дан 1 ответ
0 голосов
Правильный ответ

Ваши ошибки:

1) Объявление текстовых переменных и неиспользование их.

2) Ненужный тип longint, зачем такой большой тип?

Типа Integer вполне достаточно (-32 768 … 32 767).

3) Объявление абсолютно ненужной переменной z.

4) Главная ошибка - это непонимание задания, и соответственно неправильно построенный алгоритм.


Попробуйте это, самое оптимальное по времени, минимальное кол-во переменных. Использован метод Гаусса, можно было и арифм. прогрессию.


var

  n: integer;

  text: text;


begin

  assign(text, 'input.txt'); reset(text);

  readln(text, n); close(text);

  

  if (n > 10000) then exit;

  

  assign(text, 'output.txt'); rewrite(text);

  if n < 0 then Writeln(text, -((1 + abs(n)) * (abs(n) / 2) - 1))

  else Writeln(text, (1 + n) * (n / 2));

  close(text);

end.


(5.8k баллов)