Ограничения: время – 200ms/500ms, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Загадано некоторое английское слово, случайно выбранное из словаря.
Слово содержит от 1 до 20 букв. Первоначально все буквы слова заменены символом '*'.
Можно назвать одну из 26 букв алфавита от 'a' до 'z' и все буквы слова, совпадающие с названной, будут открыты.
Необходимо, сделав как можно меньшее количество попыток, открыть все буквы слова.
Вы должны написать подпрограмму с именем solve, угадывающую загаданное слово.
void solve(const char s[]); // С/С++
procedure solve(var s:string); // Pascal
Этой подпрограмме передается строка, первоначально состоящая из символов '*'. Количество символов '*' в строке совпадает с длиной загаданного слова.
По мере угадывания символы '*' в строке будут заменяться на буквы.
Для угадывания буквы подпрограмма должна вызывать функцию guess.
int guess(char b); // С/С++
function guess(b:char):integer; // Pascal
В качестве аргумента необходимо указать строчную английскую букву от 'a' до 'z'. Функция возвращает количество открытых букв.
Пересылаемое на проверку решение должно содержать только подпрограмму solve,
вспомогательные функции, команды #include (в C/C++) и глобальные переменные.
В функциях не должен выполняться ввод или вывод.
Пример программы на С/C++
void solve(const char s[])
{ char ch;
for(ch='a';ch<='z';++ch)
{ guess(ch);
if(strchr(s,'*')==NULL) break;
}
}
Пример программы на Pascal
procedure solve(var s:string);
var ch:char;
begin
for ch:='a' to 'z' do
begin
guess(ch);
if pos('*',s)=0 then break;
end;
end;
Решение участника, которое открывает слово за минимальное количество попыток,
получает оценку 100 баллов. Решение, которое открывает слово за количество попыток,
большее или равное, чем у решения, приведенное в примере,
получает оценку 0 баллов. Остальные решения получают оценку, пропорциональную достигнутым результатам
по сравнению с лучшим решением.