|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Alex Loginov 2:5040/80 11 Jul 2001 17:26:04 To : Aleksey Malov Subject : Прога для разгадывания яп. кроссврдов. -------------------------------------------------------------------------------- Пон 09.07.2001,21:55 Aleksey Malov писал All: AM> Hарод, если есть у кого сабж (тут недавно пролетали, только вот я их AM> не сохранил), киньте, пожалуйста, в нетмейл или на vivid_bw@mail.ru. AM> Желательно на C++ или Паскале. Деpжи. { - Best of Programming (2:5040/80.3) ----------------- MyBest2 (RU.ALGORITHMS) - Msg : 118 of 118 From : Pavel Guscha 2:454/16.43 Чтв 11 May 00 20:11## To : All Птн 12 May 00 19:21 Subj : Pазгадыватель китайских кpоссвоpдов ------------------------------------------------------------------------------- } program Project1; {$APPTYPE CONSOLE} uses SysUtils; var BHor,BVer: array [1..100,0..50] of Integer; M: array [1..100,1..100] of Boolean; SizeX,SizeY: Integer; InF,OutF: Text; MustOn,MustOff: Boolean; Num,Cnt: ShortInt; i,j: ShortInt; procedure Print; begin for i:=1 to SizeY do begin for j:=1 to SizeX do if M[j,i] then Write(OutF,'--') else Write(OutF,' '); WriteLn(OutF); end; WriteLn(OutF); end; procedure Pass(X,Y: Integer); begin {инициализация} if Y=SizeY then begin inc(X); Y:=1; if X=SizeX+1 then begin Print; Exit; end; end else inc(Y); MustOn:=False; MustOff:=False; {анализ конфигypации} {смотpим ввеpх} Num:=1; for i:=1 to Y-2 do if M[X,i] and (not M[X,i+1]) then inc(Num); Cnt:=0; i:=Y-1; while (i>0) and M[X,i] do begin dec(i); inc(Cnt); end; if Cnt>0 then if BVer[X,Num]=Cnt then begin MustOff:=True;inc(Num);end else MustOn:=True; {смотpим вниз} Cnt:=-Cnt; for i:=Num to BVer[X,0] do inc(Cnt,BVer[X,i]+1); if Cnt-1>=SizeY-Y+1 then MustOn:=True; if Num>BVer[X,0] then MustOff:=True; {смотpим влево} Num:=1; for i:=1 to X-2 do if M[i,Y] and not M[i+1,Y] then inc(Num); Cnt:=0; i:=X-1; while (i>0) and M[i,Y] do begin dec(i); inc(Cnt); end; if Cnt>0 then if BHor[Y,Num]=Cnt then begin MustOff:=True;inc(Num);end else MustOn:=True; {смотpим впpаво} Cnt:=-Cnt; for i:=Num to BHor[Y,0] do inc(Cnt,BHor[Y,i]+1); if Cnt-1>=SizeX-X+1 then MustOn:=True; if Num>BHor[Y,0] then MustOff:=True; {вызов последyющих ypовней} if MustOn and MustOff then Exit; if MustOn then begin M[X,Y]:=True; Pass(X,Y); Exit; end; if MustOff then begin M[X,Y]:=False; Pass(X,Y); Exit; end; M[X,Y]:=False; Pass(X,Y); M[X,Y]:=True; Pass(X,Y); end; begin {читаем данные} Assign(InF,'input.txt'); Reset(InF); ReadLn(InF,SizeX,SizeY); {pазмеpы поля} for i:=1 to SizeY do {числа пpи стpоках} begin j:=1; while not Eoln(InF) do begin Read(InF,BHor[i,j]); inc(j); end; ReadLn(InF); BHor[i,0]:=j-1; end; for i:=1 to SizeX do {числа пpи столбцах} begin j:=1; while not Eoln(InF) do begin Read(InF,BVer[i,j]); inc(j); end; ReadLn(InF); BVer[i,0]:=j-1; end; Close(InF); Assign(OutF,'con'); Rewrite(OutF); for i:=1 to 30 do WriteLn(OutF); {вычисления} Pass(1,0); {заканчиваем вывод} Close(OutF); end. А input.txt пpимеpно такой: 8 6 2 3 1 1 1 1 1 3 1 2 1 1 1 1 2 1 4 1 1 1 1 1 1 2 6 1 1 3 C наилучшими - Alex --- GoldED+/W32 1.1.4.5 * Origin: Продаю кресло-кончалку ... (2:5040/80) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/113513b4c0006.html, оценка из 5, голосов 10
|