Алгоритм выигрыша в этой игре очень простой: каждый раз надо забирать из кучки M+1 камешек. Следовательно, первым ходом надо забрать количество камешков, равное остатку от целочисленного деления N на М+1, а затем в каждый последующий ход забирать столько камешков, чтобы оставшееся их число было кратно M+1.
Ниже приведено решение на языке Borland Pascal 7.01
uses Crt;
var
N,M,k:integer;
begin
ClrScr;
Write('N,M='); Read(N,M);
k:=N mod (M+1);
Writeln(k);
ReadKey
end.
Тестовое решение:
N,M=7 4
2
Когда писал изначально, лапы были не из дуг, а из прямых, но потом мне помог один очень хороший человек (благодарности пользователю Amillia25), так что выкладываю конечный вариант.
Чтобы поменять размер изображения, измените значение константы n. Чтобы добавить сетку, уберите фигурные скобки.
uses graphabc;
{var i: integer;}
const n=30; w=16; h=15;
begin
setwindowsize(w*n,h*n);
setpencolor(clgray);
{for i:=0 to w do line(i*n,0,i*n,h*n);
for i:=0 to h do line(0,i*n,w*n,i*n);}
setpencolor(clblack);
setbrushcolor(clwhite);
arc(n*3,n*11-n div 4,n*3+n div 4,-158,-22);
line(0,n*12,n*2,n*12);
line(n*3,n*12,n*6,n*12);
arc(n*2+n div 2,n*12,n div 2,180,0);
circle(n*4-n div 4,n*13,n div 4);
circle(n*3-n div 8,n*13+n div 2,n div 8);
arc(n*12,3*n,n*3, 270, 180);
arc(n*12,3*n,n,270,180);
setbrushcolor(clblack);
circle(n*12,3*n,n div 15);
arc(n*6,n*2-n div 4,n*3+n div 4,-90,-18);
circle(n*9,4*n,n div 10);
line(n*6,n*5,n*8,n*6);
line(n*8,n*6,n*9,n*6);
arc(n*9,n*5,n,270,0);
line(n*9,n*6,n*9,n*8);
arc(21*n div 2, n*10, 5*n div 2, 127, 180);
line(n*8,n*10,n*9,n*9);
line(n*9,n*9,n*9,n*12);
line(n*9,n*12,n*8,n*12);
arc(11*n div 2+2, n*12, 5*n div 2, -53, 0);
line(n*7,n*14,n*7,n*15);
arc(n*7,n*13,n*2,270,0);
line(n*9,n*13,n*11,n*13);
arc (13*n, 23*n div 2, 5*n div 2, -142,-89);
line(n*13,n*14,n*13,n*15);
line(n*13,n*15,n*14,n*13);
line(n*14,n*13,n*12,n*13);
line(n*12,n*13,n*13,n*12);
line(n*13,n*12,n*13,n*10);
line(n*13,n*10,n*12,n*6);
line(n*13,n*12,n*15,n*11);
line(n*15,n*11,n*16,n*6);
<span>end.</span>