На вход программе подается последовательность цифр. Ввод этих символов заканчивается точкой (другие символы, отличные от «.» и цифр 0 ... 9, во входных данных отсутствуют; в программе на языке Бейсик символы можно вводить по одному в строке, пока не будет введена точка). Требуется написать эффективную программу, которая будет печатать цифры, встречающиеся во входной последовательности, в порядке увеличения частоты их встречаемости. Каждая цифра при этом должна быть распечатана один раз. Если какие-то цифры встречаются одинаковое число раз, то они выводятся по возрастанию. Например, пусть на вход подаются следующие символы: 1232432. В данном случае программа должна вывести: 1 4 3 2.
Решение задачи №3.
var
a: array [0..9] of integer; {Задаем целочисленный массив а с индексами от 0 до 9}
ch: char; {Задаем символьную переменную, которая поможет нам считать каждую цифру до точки}
num, i, j:byte; {Задаем переменные типа byte}
min, k: integer; {Задаем целочисленные переменные}
begin
for i:=0 to 9 do {Цикл от 0 до 9 для обнуления массива}
a[i]:=0; {Обнулили массив}
read(ch); {Считываем первое число}
while ch<>'.' do {Задаем цикл для считывания остальных чисел до точки (цикл работает пока переменная ch не равна точки)}
begin
num:=ord(ch)-48; {Переменная num принимает значение считанного числа}
a[num]:=a[num]+1; {Массив с индексом значения считанного числа (a[num]) увеличивает свое значение на единицу (считаем количество каждого числа в последовательности)}
read(ch); {считали очередное число}
end; {закрыли цикл}
for i:=0 to 9 do {открываем цикл для сортировки массива и вывода на экран результата}
begin
min:=a[0]; {переменная min принимает значение первого элемента массива a[0](количество нулей в последовательности)}
k:=0; {начальное значение переменной k равно 0}
for j:=0 to 9 do {в данном цикле сравниваем значения каждого элемента массива с значением min}
begin
if a[j]<min then {сравниваем массив с переменной min}
begin
min:=a[j];
k:=j;
end;
end;
if a[k]<>0 then
write(k,' ');
a[k]:=maxint;
end;
end.