Дано натуральное число Н. Найти максимальное и минимальное число, которое состоит с тех самых цифр и в том же каличестве, что и Н. Входные данные: целое число Н. Исходные данные: в одной строчке должно выводится минимальное и через пробел максимальное число.
Например: Вводится 7051
Выводится 1057 7510.
Мне нужно либо программа в Паскале либо обяснение, чтобы я её сама написала. Помогите пожалуйста
Другие языки программирования и технологии
Помогите пожалуйста с программированием
В разных задачах, при отладке и работе с программой могут возникать ошибки, связанные с вводом числовых значений.
К ним относятся следующие возможные ограничения:
− значение не должно превышать максимального значения типа числа
− значение должно быть только целочисленным
− значение должно быть только положительным
− значение должно содержать только цифры
Если эти условия не соблюдаются, то возникает ошибка ввода значения.
Конкретно для данной задачи можно воспользоваться вводом набора цифр в строковую переменную и работать с ней:
1) введём значение в строковую переменную
2) проверить на допустимость символа — только символы цифр от '0' до '9'
3) проверить на ведущий '0' — нормальное число обычно начинается с любой цифры оличной от 0
Со строкой и работать проще…
Просто нужно выяснить сколько раз какой символ входит в введённое значение.
4) посчитаем сколько раз какая цифра входит в число и соответствующим образом заполним массив
5) простым перебором значений от '0' до '9' соберём минимальное и максимальное число исходя из полученных значений массива
Просто для минимального числа, цифры с более большим значением будем добавлять в конец, а для максимального − в начало…
6) т. к. стока, относящаяся к минимальному числу, может начинаться с 0, мы должны найти первое вхождение в строку значения отличного от 0 и поменять его с первым символом строки.
Вот всё решение задачи:
var S, Min, Max : String; N : Byte; Ch : Char; A : array ['0'..'9'] of Byte;
begin
Write('Введите натуральное число: '); ReadLn(S);
{ Проверим на правильность ввода числа }
for N := 1 to Length(S) do if Not (S[N] in ['0'..'9']) then begin WriteLn('Число должно состоять только из цифр. '); Halt; end;
if S[1] = '0' then begin WriteLn('Натуральное число не должно начинаться с 0.'); Halt; end;
{ Выясним сколько раз какая цифра входит в число }
for Ch := '0' to '9' do A[Ch] := 0;
for N := 1 to Length(S) do Inc(A[S[N]]);
{ Соберём максимальное число и минимальное число }
Max := ''; Min := '';
for Ch := '0' to '9' do for N := 1 to A[Ch] do begin Max := Ch + Max; Min := Min + Ch; end;
{ В минимальном числе первая цифра должна быть отлична от 0 }
if Min[1] = '0' then
begin
{ Поменяем первую слева цифру отличную от 0 и ведущий ноль }
N := 1; repeat Inc(N); until Min[N] <> '0';
Min[1] := Min[N]; Min[N] := '0';
end;
WriteLn(Min, #32, Max);
end.
Вот результат работы программы:
Введите натуральное число: 7051
1057 7510
Введите натуральное число: 951023654789
102345567899 998765543210
Видите как всё просто!
При этом мы не ограничиваем пользователя вводом значения числа… ну разве что 255 символов ;-)
К ним относятся следующие возможные ограничения:
− значение не должно превышать максимального значения типа числа
− значение должно быть только целочисленным
− значение должно быть только положительным
− значение должно содержать только цифры
Если эти условия не соблюдаются, то возникает ошибка ввода значения.
Конкретно для данной задачи можно воспользоваться вводом набора цифр в строковую переменную и работать с ней:
1) введём значение в строковую переменную
2) проверить на допустимость символа — только символы цифр от '0' до '9'
3) проверить на ведущий '0' — нормальное число обычно начинается с любой цифры оличной от 0
Со строкой и работать проще…
Просто нужно выяснить сколько раз какой символ входит в введённое значение.
4) посчитаем сколько раз какая цифра входит в число и соответствующим образом заполним массив
5) простым перебором значений от '0' до '9' соберём минимальное и максимальное число исходя из полученных значений массива
Просто для минимального числа, цифры с более большим значением будем добавлять в конец, а для максимального − в начало…
6) т. к. стока, относящаяся к минимальному числу, может начинаться с 0, мы должны найти первое вхождение в строку значения отличного от 0 и поменять его с первым символом строки.
Вот всё решение задачи:
var S, Min, Max : String; N : Byte; Ch : Char; A : array ['0'..'9'] of Byte;
begin
Write('Введите натуральное число: '); ReadLn(S);
{ Проверим на правильность ввода числа }
for N := 1 to Length(S) do if Not (S[N] in ['0'..'9']) then begin WriteLn('Число должно состоять только из цифр. '); Halt; end;
if S[1] = '0' then begin WriteLn('Натуральное число не должно начинаться с 0.'); Halt; end;
{ Выясним сколько раз какая цифра входит в число }
for Ch := '0' to '9' do A[Ch] := 0;
for N := 1 to Length(S) do Inc(A[S[N]]);
{ Соберём максимальное число и минимальное число }
Max := ''; Min := '';
for Ch := '0' to '9' do for N := 1 to A[Ch] do begin Max := Ch + Max; Min := Min + Ch; end;
{ В минимальном числе первая цифра должна быть отлична от 0 }
if Min[1] = '0' then
begin
{ Поменяем первую слева цифру отличную от 0 и ведущий ноль }
N := 1; repeat Inc(N); until Min[N] <> '0';
Min[1] := Min[N]; Min[N] := '0';
end;
WriteLn(Min, #32, Max);
end.
Вот результат работы программы:
Введите натуральное число: 7051
1057 7510
Введите натуральное число: 951023654789
102345567899 998765543210
Видите как всё просто!
При этом мы не ограничиваем пользователя вводом значения числа… ну разве что 255 символов ;-)
Вот мой подход:
разбить число на цифры, записать их в переменные
цифры поставить по возрастанию и составить из этого наименьшее число
цифры поставить по убыванию и составить из этого наибольшее число
вывести на экран
H - 185
8 5 1 наибольшее
1 5 8 наименьшее
разбить число на цифры, записать их в переменные
цифры поставить по возрастанию и составить из этого наименьшее число
цифры поставить по убыванию и составить из этого наибольшее число
вывести на экран
H - 185
8 5 1 наибольшее
1 5 8 наименьшее
Похожие вопросы
- Помогите пожалуйста с программированием БЕЙСИК
- 100 балов Помогите пожалуйста с программированием С++
- помогите пожалуйста в ПРОГРАММИРОВАНИИ
- Ассемблер! ! Помогите, пожалуйста с программированием.
- помогите пожалуйста по программированию!!!
- Помогите пожалуйста с программированием в паскаль
- Помогите пожалуйста разобраться с вопросами по информатике и программированию
- Помогите пожалуйста решить задачу по программированию. В чем я ошибаюсь?
- Здравствуйте! помогите пожалуйста выполнить зачётные задания по программированию на Pascal
- Помогите пожалуйста определиться с отраслью программирования и специализацией.