printРабочее место участника

printЗадачи

1978. Угадайка

Ограничения: время – 1s/2s, память – 128MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Напишите программу, которая может выиграть в следующую игру. Некто задумал число от 2 до 1000. Вы называете пробные числа `k_i` в диапазоне от 2 до `10^6`. Если задуманное число делится на `k_i` без остатка, то задуманное число заменяется на частное от деления, иначе к задуманному числу прибавляется пробное число `k_i`, и игра продолжается. После каждого хода вы получаете информацию, было выполнено деление или добавление пробного числа к задуманному числу. Если после изменения число становится равным 1, вы выигрываете. Если вы не сможете получить 1 после 1000 ходов, то вы проигрываете. Называть числа, уже названные ранее, запрещается.
Вы должны написать подпрограмму с именем solve без параметров.
void solve(); // С/С++
procedure solve; // Pascal
Для выполнения хода ваша подпрограмма должна вызывать подпрограмму check с пробным числом в качестве аргумента. Эта функция возвращает 1 (true), если было выполнено деление, или 0 (false), если было выполнено сложение. Если срабатывает условие завершения (получение 1 или количество ходов стало больше 1000), то функция завершает выполнение программы.
int check(int k); // С/С++
function check(k:integer):boolean; // Pascal
Пересылаемое на проверку решение должно содержать только подпрограмму solve, вспомогательные функции, команды #include (в C/C++) и глобальные переменные. В подпрограммах не должен выполняться ввод или вывод.
Пример программы на языке C/C++:
void solve()
{ for(int i=2;i<=1000;++i)
    check(i);
}
Пример программы на языке Pascal:
procedure solve;
var i:integer;
begin
  for i:=2 to 1000 do
    check(i);
end;
loading