Показать сообщение отдельно

  #8  
Старый 07.02.2008, 23:50
A2GIL
Познающий
Регистрация: 31.08.2007
Сообщений: 94
Провел на форуме:
422909

Репутация: 200
Отправить сообщение для A2GIL с помощью ICQ
По умолчанию

Цитата:
У вас ошибко в алгоритме Сэр)):
О. ребят! интересненькая задачка! Pir4tt, замечание верное. но тогда получается, что выводятся все следующие счастливые числа. Надо ведь только одно следующее! Тут есть маленькая загвоздка. Лучше воспользоваться дополнительными процедурами.
Короче убил, аж целый час. Было интересно! Проверяй
Код:
Var
a,b,c,d,e,f : byte;
aw,bw,cw,dw,ew,fw,nw : string;
er1,er2,er3,er4,er5,er6 : integer;
left,right:integer;


procedure patch(v1,v2,v3:byte;var ot:integer);
var
 buf:string;
 code:integer;
begin
 if (v1=0) and (v2=0) then buf:=inttostr(v3)
 else
 if v1=0 then buf:=inttostr(v2)+inttostr(v3)
 else
  buf:=inttostr(v1)+inttostr(v2)+inttostr(v3);
  Val(buf,ot,code);
end;

procedure dispatch(digit:integer; var s1,s2,s3:byte);
var
 buf:string;
 code:integer;
begin
 buf:=inttostr(digit);
 if digit<10 then begin
  s1:=0;s2:=0;s3:=digit;
  end
 else
  if digit<100 then begin
   s1:=0;
   Val(copy(buf,2,1),s2,code);
   Val(copy(buf,3,1),s3,code);
  end
 else begin
  Val(copy(buf,1,1),s1,code);
  Val(copy(buf,2,1),s2,code);
  Val(copy(buf,3,1),s3,code);
 end;
end;

begin
 ClrScr;    
 writeln('Enter your lucky-number');
 readln(nw);

 if Length(nw)<>6 then
  writeln('Enter valid number')
 else
  begin
  aw:=Copy(nw,1,1);                
  bw:=Copy(nw,2,1);                 
  cw:=Copy(nw,3,1);                   
  dw:=Copy(nw,4,1);
  ew:=Copy(nw,5,1);
  fw:=Copy(nw,6,1);

  Val(aw,a,er1);
  Val(bw,b,er2);
  Val(cw,c,er3);
  Val(dw,d,er4);
  Val(ew,e,er5);
  Val(fw,f,er6);

 if a+b+c+d+e+f = 54 then
  begin
   writeln('Congratulation! It is lucky-number!');
   writeln('Next lucky-number is 000000');
  end
 else

  if a+b+c=d+e+f then
   writeln('Congratulation! It is lucky-number!')
  else  begin

 patch(d,e,f,right);
 patch(a,b,c,left);
 if left=0 then begin
  left:=1;
  dispatch(left,a,b,c);
  right:=0;
  end;
  while a+b+c<>d+e+f do
    begin
      inc(right);
      dispatch(right,d,e,f);
      if (d=10) and (e=10) and (f=10) then begin
       patch(a,b,c,left);
       inc(left);
       dispatch(left,a,b,c);
      end;
    end;
     writeln('Next lucky-number is ',a,b,c,d,e,f);
    end;
     readln;
    end;
end.

Последний раз редактировалось A2GIL; 07.02.2008 в 23:54..
 
Ответить с цитированием