Пожалуйста помогите решить задачу.
Условие: Дано натуральное число n, 1 < n < 30000. Напишите программу, которая изменит порядок цифр числа так, чтобы получить минимально возможное число.
Примечание: В записи числа n цифра 0 отсутствует.
Ввод: число n вводится с клавиатуры.
Вывод: на экран в строку через пробел выводится исходное и преобразованное число.
Пожалуйста помогите, а то мне придётся летом перездавать информатику, а мне этого очень не хочется. Помогите плиз...
Pascal. Периметр многоугольника, строки, графика
Перевести число в строку (стандартная функция). Разбить на цифры (один цикл). Цифры упихать в массив (в том же цикле). Упорядочить массив по возрастанию (раздел "Алгоритмы"). Вывести весь в одну строку.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Хыиуду,
а ты можешь написать саму задачу, а то я совсем туплю и ничерта не понимаю... буду тебе за это очень признателен...
а ты можешь написать саму задачу, а то я совсем туплю и ничерта не понимаю... буду тебе за это очень признателен...
2 Mook: на чем задача ?
[syntax='Delphi']
var
S:String;
i,j,k,n:integer;
begin
//Первый пунк можно опустить, если изначально дать числу строковый тип, я думаю препод к этому не придерется, важен результат.
// Загоняешь каждый символ в массив - получаются числа
for i:=1 to length(s) do ....
a:=....
//Сортируешь
// for i := n - 1 downto 1 do
for j := 0 to i-1 do
if a[j] > a[j+1] then
begin
t := a[j];
a[j] := a[j+1];
a[j+1] := t;
end;
// Дальше загоняешь все в строку и выводишь на экран.
for k:=1 to i-1 do
begin
S:=S+' '+IntTostr(a[k]); // Если Delphi
end;
// S - это и есть твое исходное число.
[/syntax]
Вот как то так примерно.
[syntax='Delphi']
var
S:String;
i,j,k,n:integer;
begin
//Первый пунк можно опустить, если изначально дать числу строковый тип, я думаю препод к этому не придерется, важен результат.
// Загоняешь каждый символ в массив - получаются числа
for i:=1 to length(s) do ....
a:=....
//Сортируешь
// for i := n - 1 downto 1 do
for j := 0 to i-1 do
if a[j] > a[j+1] then
begin
t := a[j];
a[j] := a[j+1];
a[j+1] := t;
end;
// Дальше загоняешь все в строку и выводишь на экран.
for k:=1 to i-1 do
begin
S:=S+' '+IntTostr(a[k]); // Если Delphi
end;
// S - это и есть твое исходное число.
[/syntax]
Вот как то так примерно.
< L3X. (ICQ: 8721378, Mail - l3x@list.ru)
BHy4ok, Тебе конечно большое спасибо, но нужно именно в паскале... Спасибо что отозвался и решил помочь...
Mook писал(а):BHy4ok, Тебе конечно большое спасибо, но нужно именно в паскале... Спасибо что отозвался и решил помочь...
ам... вообще-то этот код будет работать и в паскале, это основные функции которые тебе нужны. Я лишь отметил ту строку которая не будет работать в паскале, остальное все идентично, там все банально.
< L3X. (ICQ: 8721378, Mail - l3x@list.ru)
Вот держи/
Я так понял тебе еще надо было сделать проверку, содержится ли "0" и входит ли число в указанный интервал.
Проверишь т.к. в паскале не компилировал.
[syntax='Pascal']
uses crt;
type
ch1 =set of char;
var
S,S1:String;
a:array[0..100] of integer;
i,j,t,buf,er,k:integer;
ch:ch1;
label 1;
begin
ch:=['0'..'0'];
1:
write('vvedite chislo: ');
readln(S);
for I := 0 to length(s) do
begin
if s in ch then
begin
writeln('v chisle ne mojet bit "0"!');
writeln;
goto 1;
end;
end;
val(S,K,er);
if (k < 1) or (k > 30000) then
begin
writeln('1 < n < 30000');
writeln;
goto 1;
end;
for i:=0 to length(s) do
begin
val(S,a,er);
end;
for i:=0 to length(s) do
begin
buf:=a;
j:=i-1;
while (j>=0) and (a[j]>buf) do
begin
a[j+1]:=a[j];
j:=j-1;
end;
a[j+1]:=buf;
end;
writeln;
writeln('ishodnoe chislo: ',S);
write('minimalnoe chislo: ');
for i:=1 to i-1 do
begin
write(a);
end;
readln;
end.
[/syntax]
Я так понял тебе еще надо было сделать проверку, содержится ли "0" и входит ли число в указанный интервал.
Проверишь т.к. в паскале не компилировал.
[syntax='Pascal']
uses crt;
type
ch1 =set of char;
var
S,S1:String;
a:array[0..100] of integer;
i,j,t,buf,er,k:integer;
ch:ch1;
label 1;
begin
ch:=['0'..'0'];
1:
write('vvedite chislo: ');
readln(S);
for I := 0 to length(s) do
begin
if s in ch then
begin
writeln('v chisle ne mojet bit "0"!');
writeln;
goto 1;
end;
end;
val(S,K,er);
if (k < 1) or (k > 30000) then
begin
writeln('1 < n < 30000');
writeln;
goto 1;
end;
for i:=0 to length(s) do
begin
val(S,a,er);
end;
for i:=0 to length(s) do
begin
buf:=a;
j:=i-1;
while (j>=0) and (a[j]>buf) do
begin
a[j+1]:=a[j];
j:=j-1;
end;
a[j+1]:=buf;
end;
writeln;
writeln('ishodnoe chislo: ',S);
write('minimalnoe chislo: ');
for i:=1 to i-1 do
begin
write(a);
end;
readln;
end.
[/syntax]
< L3X. (ICQ: 8721378, Mail - l3x@list.ru)