Решить , это нужно делать в паскале:
1) напишите программу, которая по заданному числу вычисляет его последнюю цифру
2) напишите программу, которая по заданному числу вычисляет его вторую цифру справа
3) напишите программу, которая по заданному числу вычисляет его третью цифру справа
4) напишите программу, которая по заданному числу вычисляет его четвертую цифру справа
5) напишите программу, вычисляющую сумму цифр четырехзначного целого числа
6) напишите программу, вычисляющую сумму цифр пятизначначного целого числа
буду !
Определяем мощность (количество символов) использующегося алфавита. 12 букв и 10 цифр составляют 22 символа. В 1 байте допустимо запоминать 256 комбинаций, поэтому "минимальное количество байтов" для кодирования символа равно 1. Номер из 6 символов займет 6 байт.
А для 32 номеров потребуется 32×6 = 192 байта.
Я встречал эту задачу в несколько ином виде: Каждый символ кодируется одинаковым и минимально возможным количеством не байтов, а бит. А номер кодируется минимально возможным количеством байт. Тогда получается 5 бит на символ (2⁴ < 22 < 2⁵), 6 символов требуют 5×6 = 30 бит = 30/8 ≈ 4 байта. А 32 номера занимают 32×4 = 128 байт.
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.
19088389413126615134632772499