Даны два целых положительных числа определить какие цифры использовались для записи и первого и 2ого числа и составить из них наименьшие возможное число(каждую цифру можно использовать лишь один раз)- Pascal(Паскаль)

program pr1;
type tmasb=array[1..10] of byte;
var ch1,ch2:integer; i,kz1,kz2,kz3:byte; z1,z2,z3:tmasb;
 
procedure pr_rasp(ch:longint; var z:tmasb; var kz:byte);
begin
  kz:=0;
  while ch<>0 do
  begin
    inc(kz);
    z[kz]:=ch mod 10;
    ch:=ch div 10;
  end;
end;
 
procedure pr_sozd(z1,z2:tmasb; kz1,kz2:byte;var z:tmasb;var kz:byte);
var i,j:byte; pr:boolean;
begin
  for i:=1 to kz1 do
  begin
    pr:=true;
    for j:=1 to kz2 do
    if z1[i]=z2[j] then begin pr:=false;break;end;
    if pr then continue;
    pr:=true;
    for j:=1 to kz do
    if z1[i]=z[j] then pr:=false;
    if pr then begin inc(kz); z[kz]:=z1[i];end;
  end;
end;
 
function f_new_ch(z:tmasb; kz:byte):longint;
var new:longint;
begin
  new:=0;
  for i:=1 to kz do
    new:=new*10+z[i];
  f_new_ch:=new;
end;
 
procedure pr_swap(var a,b:byte);
var buf:byte;
begin
  buf:=a;
  a:=b;
  b:=buf;
end;
 
procedure pr_sort(var z:tmasb; kz:byte);
var pr:boolean; i,j:integer;
begin
  pr:=true;
  while pr do
  begin
    pr:=false;
    for i:=1 to kz-1 do
    if z[i]>z[i+1] then begin pr_swap(z[i],z[i+1]);pr:=true;end;
  end;
end;
 
begin
  writeln('Vvedi 1-oe chislo');
  readln(ch1);
  writeln('Vvedi 2-oe chislo');
  readln(ch2);
  pr_rasp(ch1,z1,kz1);
  pr_rasp(ch2,z2,kz2);
  pr_sozd(z1,z2,kz1,kz2,z3,kz3);
  pr_sort(z3,kz3);
  writeln('New chislo- ',f_new_ch(z3,kz3));
end.

Leave a Comment

− 3 = 4