Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2008, 15:41   #1
Cheetah
 
Регистрация: 16.10.2008
Сообщений: 3
По умолчанию Перестановка цифр в целом числе. Паскаль.

Нужно перестановкой цифр в произвольном целом числе получить максимально возможное число. Понимаю, что задачка должна решаться элементарно, но как это сделать никак не доходит, поэтому прошу помощи =)
Cheetah вне форума Ответить с цитированием
Старый 16.10.2008, 16:13   #2
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Переводишь число в строку, а потом каждую цифру обратно в число и сортируешь по убыванию.
Код:
Var I,J,N:Integer;
    S:String;
    A:Char;
    B:Boolean;
begin
ReadLn(N);
Str(N,S);
B:=True;
While B Do
Begin
B:=False;
For I:=2 to Length(S) Do
 Begin
 Val(S[I-1],J,J);
 Val(S[I],N,N);
 If N > J Then
  Begin
  A:=S[I];
  S[I]:=S[I-1];
  S[I-1]:=A;
  B:=True;
  End;
 End;
End;
Val(S,N)
WriteLn(N);
ReadLn;
end.
Без особой оптимизации как то так.
ICQ: 5311314
[SIGPIC][/SIGPIC]

Последний раз редактировалось AVer; 16.10.2008 в 16:29.
AVer вне форума Ответить с цитированием
Старый 16.10.2008, 19:42   #3
Cheetah
 
Регистрация: 16.10.2008
Сообщений: 3
По умолчанию

Нельзя так к сожалению, тема другая, надо что-то с циклами мутить
Cheetah вне форума Ответить с цитированием
Старый 16.10.2008, 19:48   #4
Viteef
stopfake.org
Участник клуба
 
Регистрация: 03.05.2007
Сообщений: 1,927
По умолчанию

Цитата:
перестановкой цифр в произвольном целом числе получить максимально возможное число
Проще говоря это сортировка по убыванию.

45674 >> 76544

Цитата:
Нельзя так к сожалению, тема другая, надо что-то с циклами мутить
В алгоритме сортировки разве нету циклов?

Последний раз редактировалось Viteef; 16.10.2008 в 19:56.
Viteef вне форума Ответить с цитированием
Старый 16.10.2008, 20:58   #5
Cheetah
 
Регистрация: 16.10.2008
Сообщений: 3
По умолчанию

Короче вот так как было написано выше со строками нельзя))
Cheetah вне форума Ответить с цитированием
Старый 16.10.2008, 21:07   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Сделай так.
Код:
{поменять порядок цифр в числе так чтобы оно было наибольшим}
uses crt;
var a,s:longint;i,k,n,j,x:integer;b:array[1..20] of integer;
begin
   clrscr;
   writeln('a = ');readln(a);
   n:=0;
   while a>0 do  {разделяем число на цифры и заносим их в массив}
     begin
        k:=a mod 10;     {15287=1,5,2,8,7}
        n:=n+1;
        b[n]:=k;
        a:=a div 10;
     end;
   for i:=1 to n-1 do    {сортируем массив по убыванию}
     begin                 {1,5,2,8,7=8,7,5,2,1}
        for j:=1 to n-1 do
           if b[j]>b[j+1] then
              begin
                 x:=b[j];b[j]:=b[j+1];b[j+1]:=x;
              end;
     end;
  for i:=n downto 1 do    {создаем новое число}
      s:=10*s+b[i];
writeln(s);               {8,7,5,2,1=8*10*10*10*10+7*10*10*10+5*10*10+2*10+1}
readln;
end.
puporev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка и перестановка NxM Помощь студентам 4 29.05.2008 11:56
Вывод чисел, делящихся на каждую из своих цифр. Паскаль ЯншинаВера Помощь студентам 3 08.04.2008 11:50
Перестановка битов. RegentM Общие вопросы Delphi 3 05.11.2007 17:23
Перестановка Roman Помощь студентам 3 29.04.2007 05:37