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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2011, 19:29   #1
warca
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 51
По умолчанию Задача

надо эту задачу написать в программе.помогите пожалуйста написать ее.

Заданы три числа:a,b,c.Необходимо выяснить,можно ли так переставить цифры в числах a и b,что бы в сумме получилось c.
Входной файл содержит три целых числа a,b,c(0<a,b,c<10^9)Числа разделены пробелом.

В выходной файл следует вывести YES если искомая перестановка чисел возможна,в противном случае NO.при положительно ответе во второй строке вывести число x,получаемая перестановкой цифр числа a, и число y,получаемое перестановкой цифр числа b,сумма которых равна c.Числа в строке разделить пробелом.Если решений несколько,то следует вывести ту пару,в которой число x минимально.


Например:
вводимые числа:
12 31 25
выводимые числа:
YES
12 13.



Например:
вводимые числа:
12 13 26
выводимые числа:
NO.

Последний раз редактировалось warca; 14.10.2011 в 19:36.
warca вне форума Ответить с цитированием
Старый 14.10.2011, 20:53   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

warca, пара вопросов к тебе:
1. какой диапазон чисел?
2. есть свои наработки?

По идее, задача несложная - вводим цифры в два массива и переставляем (например, с помощью рекурсии). Неэффективно, но работать будет.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 14.10.2011, 21:03   #3
warca
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 51
По умолчанию

диапозон чисел от 0 до 10^9.своих набросков нету.не понимаю немного ее.думаю с помощью масивов,но не знаю как поменять цифры местами.
warca вне форума Ответить с цитированием
Старый 15.10.2011, 12:56   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Плохо, что нет набросков..
Короче, вот примерно так можно сделать. Писал в спешке и не тестировал особо, так что если заметишь что-то не то - пиши.
Код:
type
  tDigits= array[1..10] of byte;

var
  la,lb,ld: integer;
  da,db,dd: tDigits;
  a,b,c,r: longint;

procedure Swap(var a,b: byte);
var
  x: byte;
begin
  x:= b;
  b:= a;
  a:= x
end;

procedure Digits(x: longint; var dx: tDigits; var lx: integer);
var
  i,j: integer;
begin
  lx:= 0;
  while x>0 do begin
    inc(lx);
    dx[lx]:= x mod 10;
    x:= x div 10
  end;
  for i:=2 to lx do for j:=lx downto i do if dx[j]>dx[j-1] then Swap(dx[j],dx[j-1])
end;

procedure Permutations(x: tDigits; l: integer);
var
  i: integer;
begin
  if l=0 then begin
    Digits(c-r,dd,ld);
    if ld=lb then begin
      i:=1;
      while (i<=lb) and (dd[i]=db[i]) do inc(i);
      if i>lb then begin
        writeln('YES');
        writeln(r,' ',c-r);
        readln;
        halt
      end
    end
  end
  else for i:=l downto 1 do begin
    Swap(x[i],x[l]);
    r:= r*10+x[l];
    Permutations(x,l-1);
    r:= r div 10;
    Swap(x[i],x[l])
  end
end;

begin
  readln(a,b,c);
  Digits(a,da,la);
  Digits(b,db,lb);
  Permutations(da,la);
  writeln('NO');
  readln
end.
Задавай конкретные вопросы, если нужны пояснения.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 15.10.2011, 13:08   #5
warca
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 51
По умолчанию

спасибо за решение.программа рабочая,все правильно выдает.большое спасибо
warca вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51
задача в С++ Chaynik011091 Помощь студентам 2 29.06.2009 14:47
задача Ntfser Паскаль, Turbo Pascal, PascalABC.NET 6 24.10.2008 10:08