Название: Азы паскаля
Отправлено: loki от Ноябрь 24, 2011, 15:41:23
Дано число N составить наибольшие и наименьшие число из его цифр. Пример 7051 наибольшие: 7510, наименьшие 1057
Название: Re: Азы паскаля
Отправлено: Вилли ☂ от Ноябрь 24, 2011, 17:23:50
Общая схема действий (алгоритм): Число N преобразовываешь в строку. Проходишь по эллементам стриоки как по массиву. Сортируешь любым методом его сразу в две новые строки "максимальная" и "минимальная". Выводишь строки "максимальная" и "минимальная" на экран.
П.С. Это верно если наибольшие: 7510, наименьшие 0157 А если надо именно не учитывать 0 впереди числа, делай "костыль"
Название: Re: Азы паскаля
Отправлено: loki от Ноябрь 24, 2011, 19:15:10
А если надо именно не учитывать 0 впереди числа, делай "костыль"
по подробнее
Название: Re: Азы паскаля
Отправлено: Вилли ☂ от Ноябрь 25, 2011, 10:54:53
Другой алгоритм. без костыля: var a = 385254007; //само число var a_str = a.toString(); // его представленние ввиде строки var arr = [0,0,0,0,0,0,0,0,0,0]; // массив кол-ва встречаюшихся цифр (размер фиксированный) var mi = ""; // мин число (ввиде строки) var ma = ""; // мин число (ввиде строки) var k = 0; // вспомогательная переменная
// поиск цифр for(i=0;i<a_str.length;i++) { k = a_str[i]; arr[k]++; }
//созданее Max & Min строки for(i=0;i<10;i++) { for(j=0;j<arr[i];j++) { ma = i.toString() + ma; mi = mi + i.toString(); } }
// Результат console.log("A = " + a_str); console.log("max: " + ma); console.log("min: " + mi);
с костылём: var a=385254007; var a_str = a.toString(); var arr = []; var mi = ""; var ma = ""; var k = 0;
// поиск цифр for(i=0;i<a_str.length;i++) { k = a_str[i]; arr[k]++; }
//созданее Max & Min строки k = 0; //костыль, кол-во нулей
for(i=0;i<10;i++) { for(j=0;j<arr[i];j++) { ma = i.toString() + ma; if(i==0) k = arr[i]; // запомнили else mi = mi + i.toString();
if(i>0 && k>0) for(;k>0;k--) mi = mi + "0"; // добавили } }
console.log("A = " + a_str); console.log("max: " + ma); console.log("min: " + mi);
Название: Re: Азы паскаля
Отправлено: ztc от Ноябрь 25, 2011, 20:33:24
На Паскале решение данной задачи будет выглядеть примерно так: Program sort; var i, j, k: Integer; c, d, s: string; a, b, m: char; Begin Writeln('Введите число'); Readln(s); Writeln('Введенное число: ', s);
k:=0; // счетчик нулей наименьшего числа
for i:=1 to (Length(s)-1) do // сортировка по убыванию для нахождения максимального числа for j:=i+1 to Length(s) do
if s[j]>s[i] then begin b:=s[i]; s[i]:=s[j]; s[j]:=b; c:=s; end;
for i:=1 to (Length(s)-1) do // сортировка по возрастанию для нахождения минимального числа for j:=i+1 to Length(s) do
if s[j]<s[i] then begin a:=s[i]; s[i]:=s[j]; s[j]:=a; d:=s; end;
for i:=1 to Length(d) do if d[i] = '0' then k:=k+1; // подсчет кол-ва нулей в уже отсортированной строке (наименьшее число) begin m:=d[1]; d[1]:=d[k+1]; // обмен первого символа исходной строки с тем, который идет после нулей вначале d[k+1]:=m; end;
Writeln('Наибольшее число: ', c); Writeln('Наименьшее число: ', d); end.
|