Бөліктерге ажырату. Натурал М(м<30000) санын N(N<20) бүтін, тең немесе жобамен тең бөліктерге ажырату керек. Жобамен тең бөлік деп, кез-келген екі бөліктің айырмашылығы 1-ден аспаған бөліктерді айтамыз.
Кіру файылындағы мәліметтің форматы:Бірінші қатар-М, екінші қатар- ON;
Шығу файлындағы мәліметтің форматы: Өсу ретімен реттелген N саннан тұратын бір қатар:
Кіру файлы: Шығу файлы: Input.in Output.out
13 3 3 3 4
4
Program bolik;
Uses crt;
Var p, n, m, k: integer;
Begin clrscr;
Assigin(input,’input.in’);
Reset(input);
Readln(n);
Close(input);
Assign(output,’output.out’);
Rewrite(output);
P:=m od n; k:=m div n;
If p=0 then
For i:=1 to n do
Write(k,’ ’);
Else
Begin
For i:=1 to n-p do
Write(k,’ ‘);
For I:=1 to p do
Wr3te(k+1,’ ‘);
End;
Close(output);
End.
Ферзілер. Олипиадаларда жиі келетін есептердің бірі- «ферзілерді орналастыру» есебі. Бұл есептің шарты мынадай: N ферзіні n x n- шахмат тақтасына бір-біріне қауіп төндірмейтіндей етіп орналастыр және осындай орналастырулардың барлық варианттарын көрсет. Мұндай орналастыруды «қауіпсіз» орналастырулар деп те атайды. «Input.txt» файлында [4..20] аралығынан алынған n- ферзілер саны болу керек. Ал “output.txt” файлында әрбір «қауіпсіз» орналастыруға сәйкес келетін натурал сандар қатарларды болу керек. Қатардағы әрбір санның реттік нөмірі шахмат тақтасының вертикаль нөмірін, ал мәні горизонаталь нөмірін көрсету креке. Мысалға, «Input.txt» файлында 4 саны болса, онда “output.txt” файлында мынадай сан қатарлары болу керек:
1 3 5 2 4
1 4 2 5 3
Program fersi;
Type
TNom=1..20;
TPole=array[tNom] of TNom;
Var
N:TNom;
Pole:Ypole;
F:text;
Perv:Boolean;
Procedure Sohr;
Var i:TNom;
Begin
Assign(f,’output.txt’);
Append(f);
If perv then writeln(f) else perv:=true;
For i:=1 to n-1 do write(F,Pole[i],’ ‘);
Write(f,pole[n]); close(f);
End;
Function prover(i:TNom): Boolean;
Var
J:TNom;
Flag: Boolean;
Begin
J:=1;
Flag:=true;
While(j<>i) and flag do
Begin
Flag:=(pole[i]<>pole[j]) and (abs (pole[j]<>i-j); j:=j+1; end;
Prover:=flag; end;
Procedure poisk(I:TNom);
Var j,k:TNom;
Begin
For k:=1 to n do
Begin
Pole[i]:=k;
If prover(i) then
If i=n then sohr else poisk(i+1); end;end;
Begin
Assign(f,’input.txt’);
Reset(f);
Read(f,n);
Close(f);
Assign(f,’output.txt’);
Rewrite(f);
Close(f);
Perv:=false; poisk(1);
End.