Предмет: Информатика,
автор: lardimm
PASCAL. Перестановка
Даны пять чисел:
1890
83849
126631
146531
32749972
Для каждого найдите минимальное целое число, которое больше данного и состоит
из такого же набора цифр. Например, для числа 1932 это 2139, а для числа 1212 — это
1221.
В ответ запишите пять целых чисел. Каждое число должно быть в отдельной строке.
Порядок записи менять нельзя. Если вы не можете найти ответ для какого-то числа,
то вместо ответа поставьте знак «-» (минус без кавычек).
Аноним:
Походу, олимпиада, тут надо достаточно хитрый алгоритм реализовать
Ответы
Автор ответа:
4
PascalABC.NET 3.4.2, сборка 1863 от 10.11.2018
Внимание! Если программа не работает, обновите версию!
function Conv(s: string): string;
begin
var d := s.ToCharArray;
var (i, found) := (d.High, False);
while i >= 1 do
if d[i] > d[i - 1] then
begin
found := True;
break
end
else i -= 1;
if found then
begin
s := s[:i];
var c := d[i - 1];
d := d[i - 1:];
d.Sort;
var j := d.IndexOf(c) + 1;
s += (d[j] + d?[:j] + d?[j + 1:]).JoinIntoString
end
else s := '-';
Result := s
end;
begin
var ms := Arr('1890', '83849', '126631', '146531', '32749972');
foreach var s in ms do
Conv(s).Println
end.
1908
83894
131266
151346
32772499
Похожие вопросы
Предмет: Алгебра,
автор: Zzzssssz
Предмет: Химия,
автор: noob2pro132
Предмет: Физика,
автор: malesmisa
Предмет: Литература,
автор: Светлана2607
Предмет: Литература,
автор: олеся369