Страниц: [1]
  Печать  
Автор Тема: Азы паскаля  (Прочитано 3539 раз)
0 Пользователей и 1 Гость смотрят эту тему.
loki
Давненько
**
Offline Offline

Сообщений: 122

СПАСИБО
-вы поблагодарили: 9
-вас поблагодарили: 2


Просмотр профиля
: Ноябрь 24, 2011, 15:41:23 �

Дано число N составить наибольшие и наименьшие число из его цифр. Пример 7051  наибольшие: 7510, наименьшие 1057
Записан
Вилли ☂
Гений-Говорун
*
Offline Offline

Сообщений: 1572

СПАСИБО
-вы поблагодарили: 532
-вас поблагодарили: 722





Просмотр профиля
Ответ #1 : Ноябрь 24, 2011, 17:23:50 �

Общая схема действий (алгоритм):

Число N преобразовываешь в строку.
Проходишь по эллементам стриоки как по массиву.
Сортируешь любым методом его сразу в две новые строки "максимальная" и "минимальная".
Выводишь строки "максимальная" и "минимальная" на экран.


П.С.
Это верно если
Цитировать
наибольшие: 7510, наименьшие 0157

А если надо именно не учитывать 0 впереди числа, делай "костыль"
Записан
loki
Давненько
**
Offline Offline

Сообщений: 122

СПАСИБО
-вы поблагодарили: 9
-вас поблагодарили: 2


Просмотр профиля
Ответ #2 : Ноябрь 24, 2011, 19:15:10 �

Цитировать
А если надо именно не учитывать 0 впереди числа, делай "костыль"
по подробнее
Записан
Вилли ☂
Гений-Говорун
*
Offline Offline

Сообщений: 1572

СПАСИБО
-вы поблагодарили: 532
-вас поблагодарили: 722





Просмотр профиля
Ответ #3 : Ноябрь 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);
Последнее редактирование: Ноябрь 25, 2011, 11:00:03 от Трикс Записан
ztc
Новенький
*
Offline Offline

Сообщений: 3

СПАСИБО
-вы поблагодарили: 0
-вас поблагодарили: 0


Просмотр профиля
Ответ #4 : Ноябрь 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.
Последнее редактирование: Ноябрь 25, 2011, 20:56:54 от ztc Записан
Страниц: [1]
  Печать  
 
Перейти в: