<h3>PascalABC.NET 3.4.2, сборка 1863 от 10.11.2018</h3><h3>Внимание! Если программа не работает, обновите версию!</h3>
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.
<h2>1908</h2><h2>83894</h2><h2>131266</h2><h2>151346</h2><h2>32772499</h2>
Может можно как-то облегчить, но я не додумал еще.
Пока только так: 54/9=6 мест в купе
Program vagon;
var a,b,c,d,e:integer;
begin;
writeln ('Введите номер места');
read (a);
if a <6 then
writeln ('Купе первое');
if (a>6) and (a<12) then
writeln ('Купе второе');
if (a>12) and (a<18) then
writeln ('Купе третье');
if (a>18) and (a<24) then
writeln ('Купе четвертое');
if (a>24) and (a<30) then
writeln ('Купе пятое');
if (a>30) and (a<36) then
writeln ('Купе шестое');
if (a>36) and (a<42) then
writeln ('Купе седьмое');
if (a>42) and (a<48) then
writeln ('Купе восьмое');
if (a>48) and (a<54) then
writeln ('Купе девятое');
end.
X = 5; y = 15.
Y = 20;
X = 0.
T = 20;
X = 0 + 20 + 20 = 40;
Y = 40 + 20 = 60.
Ответ: 3.