(см. объяснение)
Объяснение:
Пункт A:
Пусть во второй куче x камней. Тогда стратегия примет вид:
(8; x)⇒(8; 3x)
По условию 8+3x≥68 ⇒ x≥20.
Так как нам нужно найти минимальное значение, то берем число 20.
Пункт Б:
Здесь многие рекомендуют просто подбирать. Но если вы все время боитесь, что найдете подходящее значение S, а оно не окажется минимальное, попробуйте предложенный ниже вариант.
Напишем программу на языке Python 3:
def f(x, y, p):
if x + y >= 68 and p == 4:
return True
elif x + y < 68 and p < 4:
if p % 2 > 0:
return f(x + 2, y, p + 1) or f(x, y + 2, p + 1) or f(3 * x, y, p + 1) or f(x, 3 * y, p + 1)
else:
return f(x + 2, y, p + 1) and f(x, y + 2, p + 1) and f(3 * x, y, p + 1) and f(x, 3 * y, p + 1)
else:
return False
for i in range(1, 60):
if f(8, i, 1):
print(i)
Результатом ее работы будет число 19, поэтому его берем в ответ. Для самоконтроля, найденное число должно быть меньше 20, так как в противном случае Петя выиграет своим первым ходом.
Пункт В:
def f(x, y, p):
if x + y >= 68 and (p == 5 or p == 3):
return True
elif x + y < 68 and p < 5:
if p % 2 > 0:
return f(x + 2, y, p + 1) and f(x, y + 2, p + 1) and f(3 * x, y, p + 1) and f(x, 3 * y, p + 1)
else:
return f(x + 2, y, p + 1) or f(x, y + 2, p + 1) or f(3 * x, y, p + 1) or f(x, 3 * y, p + 1)
else:
return False
for i in range(1, 60):
if f(8, i, 1):
print(i)
Результатом работы программы будут два числа: 17 и 18. В ответ берем число 17.
Задание выполнено!
var m:array [0..14] of integer; i:integer;
function IsPositive(a:integer):boolean;
begin
result:=(a>-1);
end;
procedure work;
var min, max, count:integer;
begin
count:=0;
min:=m[0];
max:=0;
for i:=0 to 14 do begin
if IsPositive(m[i]) then begin
inc(count);
if m[i]>max then max:=m[i];
if m[i]<min then min:=m[i];
end;
end;
writeln('MAX: ', max);
writeln('MIN: ', min);
writeln('Count: ', count);
end;
begin
for i:=0 to 14 do begin
write('n: ');
readln(m[i]);
end;
work;
readln;
end.