Вам даны результаты заплыва 10 человек. все результаты различны. укажите номера двух худших пловцов (с наибольшими временами, в порядке убывания времени).
Program ryazantsev; var n,k,i,b,sum:integer; begin readln(n,k); sum:=trunc((1+n)/2*n); //Преобразование типа real к int, trunc можно безопасно использовать, т.к. сумма n членов арифметической последовательности целых чисел - всегда целое число if sum mod k <> 0 then writeln(0) else begin for i:=1 to k do begin b:=1; while b<n/k do begin write(i+b-1, ' ', n-i-b+2, ' '); b:=b+k end; writeln() end end; end.
Пример входных данных, при которых программа выведет ноль: 6 2
И ещё, задачка должна быть оценена явно больше, чем на пять )
begin var (n, k) := ReadInteger2('n,k->'); var p := ArrGen(n, t -> t + 1); var m := new integer[k, n div k]; var sum := p.Sum div k; for var i := 0 to k - 1 do begin var m_sum := sum; m[i, 0] := p[0]; m_sum := m_sum - m[i, 0]; p := p[1:]; for var j := 1 to (n div k) - 1 do begin if m_sum - p.Last > 0 then begin m[i, j] := p.max; m_sum := m_sum - p.Max; p := p[:p.IndexMax]; end else begin if p.Where(t -> t = m_sum).Count = 1 then m[i, j] := m_sum; p := p.Where(t -> t <> m_sum).ToArray; end; end; end; var t := true; for var i := 0 to m.RowCount - 2 do if (m.Row(i).sum <> m.Row(i + 1).Sum) or (p.Length <> 0) then begin t := false; break; end; if t then m.Println else 0.Println; end.
def zadanie(results)
results = results.sort.reverse
return [results[0], results[1]]
end
# Примеры применения
p zadanie([1,2,7,8,6,4,8,8,4,9])