• 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
    exit;
    end;
    for i := 1 to n do s+=i;
    write(s);

    end.

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

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

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

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

    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
        exit;
        end;
             if n<=10000 then
           for i :=  1 to n do  s+=i
           else exit;
      write(s);
     end.

Ответы 1

  • Ваши ошибки:

    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.

  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years