Определить, какое минимальное и какое максимальное количество пар друзей могло образоваться после соревнования - 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
Листинг программы
function Proc(aa,ak:integer):integer;
begin
      if ak=1
       then Proc:=aa
       else
        begin
          While ak<>1 do
           begin
             Dec(ak);
             aa:=aa+ak;
           end;
          Proc:=aa;
        end;
end;
var  s:string;
     i,j,a,n,m,t,k,k1,kmin,kmax:integer;
begin
     Writeln('Vvodnaya stroka:');
      Readln(s);
       Writeln;
     i:=1; k:=0;
     While i<=Length(s) do
      begin
        if s[i]<>' '
         then k:=10*k+(Ord(s[i])-Ord('0'))
         else
          begin
            n:=k;
            k:=0;
          end;
        if i=Length(s)
         then
          begin
            m:=k;
            Break;
          end;
        Inc(i);
      end;
     k1:=m-1;
      i:=n-k1;
       if i=1
        then kmax:=0
        else
         begin
           k:=i-1;
           a:=k;
           kmax:=Proc(a,k);
         end;
     kmin:=0;
      k:=n div m;
       k1:=n mod m;
        if k1<>0
         then
          begin
            for j:=1 to k1 do
             begin
               a:=k;
               kmin:=kmin+Proc(a,k);
             end;
            if k<>1 then
             for j:=1 to (m-k1) do
              begin
                t:=k-1;
                a:=t;
                kmin:=kmin+Proc(a,t);
              end;
          end
         else
          if k<>1
           then
            begin
              t:=k-1;
              a:=t;
              kmin:=Proc(a,t)*m;
            end;
     Writeln(kmin,' ',kmax);
   Readln;
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
Похожие ответы