Определить, какое минимальное и какое максимальное количество пар друзей могло образоваться после соревнования - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Помогите решить эту задачу: Для участия в соревнованиях n участников были разбиты некоторым образом на m команд так, чтобы в каждой команде был хотя бы один участник. После соревнований каждая пара участников из одной команды стала друзьями. Ваша задача — написать программу, которая определит, какое минимальное и какое максимальное количество пар друзей могло образоваться после соревнования.

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

В единственная строке содержатся два целых числа n и m, разделенных одним пробелом (1 ≤ m ≤ n ≤ 109) — количество участников и количество команд соответственно.

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

Требуется вывести два целых числа kmin и kmax — минимальное возможное количество пар друзей и максимальное возможное количество пар друзей соответственно.

Примеры тестов

входные данные

5 1

выходные данные

10 10

входные данные

3 2

выходные данные

1 1

входные данные

6 3

выходные данные

3 6

Примечание

В первом примере все участники попадают в одну команду, поэтому в любом случае будет образовано ровно десять пар друзей. Во втором примере при любом разбиении в одной из команд будет два участника, а в другой — один. В таком случае количество пар друзей всегда будет равно одному. В третьем примере минимальное количество друзей выходит при разбиении на команды по 2 человека, а максимальное — при разбиении на команды размерами 1, 1 и 4 человек.

Решение задачи: «Определить, какое минимальное и какое максимальное количество пар друзей могло образоваться после соревнования»

textual
Листинг программы
  1. function Proc(aa,ak:integer):integer;
  2. begin
  3.       if ak=1
  4.        then Proc:=aa
  5.        else
  6.         begin
  7.           While ak<>1 do
  8.            begin
  9.              Dec(ak);
  10.              aa:=aa+ak;
  11.            end;
  12.           Proc:=aa;
  13.         end;
  14. end;
  15. var  s:string;
  16.      i,j,a,n,m,t,k,k1,kmin,kmax:integer;
  17. begin
  18.      Writeln('Vvodnaya stroka:');
  19.       Readln(s);
  20.        Writeln;
  21.      i:=1; k:=0;
  22.      While i<=Length(s) do
  23.       begin
  24.         if s[i]<>' '
  25.          then k:=10*k+(Ord(s[i])-Ord('0'))
  26.          else
  27.           begin
  28.             n:=k;
  29.             k:=0;
  30.           end;
  31.         if i=Length(s)
  32.          then
  33.           begin
  34.             m:=k;
  35.             Break;
  36.           end;
  37.         Inc(i);
  38.       end;
  39.      k1:=m-1;
  40.       i:=n-k1;
  41.        if i=1
  42.         then kmax:=0
  43.         else
  44.          begin
  45.            k:=i-1;
  46.            a:=k;
  47.            kmax:=Proc(a,k);
  48.          end;
  49.      kmin:=0;
  50.       k:=n div m;
  51.        k1:=n mod m;
  52.         if k1<>0
  53.          then
  54.           begin
  55.             for j:=1 to k1 do
  56.              begin
  57.                a:=k;
  58.                kmin:=kmin+Proc(a,k);
  59.              end;
  60.             if k<>1 then
  61.              for j:=1 to (m-k1) do
  62.               begin
  63.                 t:=k-1;
  64.                 a:=t;
  65.                 kmin:=kmin+Proc(a,t);
  66.               end;
  67.           end
  68.          else
  69.           if k<>1
  70.            then
  71.             begin
  72.               t:=k-1;
  73.               a:=t;
  74.               kmin:=Proc(a,t)*m;
  75.             end;
  76.      Writeln(kmin,' ',kmax);
  77.    Readln;
  78. end.

Объяснение кода листинга программы

  1. Функция Proc принимает два параметра: aa и ak.
  2. Если ak=1, то Proc присваивается значение aa.
  3. Иначе, в цикле while ak не равно 1, происходит уменьшение ak на единицу и суммирование ak с aa.
  4. После выхода из цикла, Proc присваивается значение aa.
  5. В основной программе, после ввода строки, происходит подсчет количества цифр, введенных пользователем.
  6. Затем, используя найденное количество цифр, происходит вычисление максимального и минимального количества пар друзей.
  7. Для этого используется рекурсивный вызов функции Proc.
  8. Код использует две переменные kmin и kmax для отслеживания минимального и максимального количества пар друзей.
  9. Если kmin равно 0 и kmax не равно 0, то это означает, что все цифры были использованы и не осталось пар друзей.
  10. В этом случае, значение kmax присваивается переменной kmin.
  11. Значение kmax вычисляется как произведение количества цифр на количество оставшихся друзей.
  12. Значение kmin вычисляется как произведение количества цифр на количество оставшихся друзей, умноженное на количество оставшихся друзей.
  13. Значения kmin и kmax выводятся на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы