воскресенье, 25 сентября 2016 г.

Задача с "Пример М+"

Условие:
for (i = 1; i <= n; i++)
  for (j = i; j <= m; j++)
тело цикло выполняется m + ( m - 1) + ( m - 2 ) + ... + (  m - (n - 1) ) раз
Выведите формулу для этой суммы.
[Если m=n то это просто 1+2+...+n (ранее мы выводили это "диагоналями")]
Возможный исходный код(Object Pascal):

program MPlus;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

var
  Count: Integer = 0;
  m, n: Integer;
  i, j: Integer;

begin
  writeln('Enter m, n:');
  readln(m, n);

  for i := 1 to m do
    for j := i to n do
      Inc(Count);

  writeln('Count = ', Count);
end.


Возможны 3 варианта: 
  • m=n

     
  • m<n
  • m>n
При m=n, Count = (n * (n + 1)) / 2
При m<n, Count = (m * (m + 1)) / 2
При m>n, Count = (n * (n + 1)) / 2 + (m - n) * n

Упростим:
При m<=n, Count = (m * (m + 1)) / 2
При m>n, Count = (n * (n + 1)) / 2 + (m - n) * n

Итоговая формула:


В виде исходного кода:
function MPlus(n, m: Integer): Integer;
begin
  if n >= m then
    Result := (m * (m + 1)) div 2
  else
    Result := (n * (n + 1)) div 2 + (m - n) * n;
end;

Комментариев нет:

Отправить комментарий