nanasergevn
?>

Дано натуральное число n. вычислить произведение первых n множителей. c++ или c#

Информатика

Ответы

askorikova

4

Объяснение:

Зная, что изначально в куче было S камней, для победы нужно получить не менее 32, рассмотрим все возможные ходы Пети, при которых он не выиграет. Чтобы Петя не выиграл, после любого его хода в куче должно получиться меньше 32 камней.

Действие А) S+1<32, тогда S<32-1=31

Действие Б) 3*S+1<32, тогда S<(32-1)/3=11

А теперь распишем ходы Вани. Чтобы точно победить, Ване нужно действовать так, чтобы получить максимальный результат - из двух действий максимальный дает действие Б. После его хода в куче должно стать или 32 камня, или больше.

Действие А) 3*(S+1)+1=3*S+4>=32, тогда S>=(32-4)/3=10

Действие Б) 3*(3*S+1)+1=9*S+4>=32, тогда S>=(32-4)/9=4

Таким образом мы понимаем, что нужное для Ваниной победы первым ходом число S должно должно лежать в диапазоне от 4 до 31, тогда минимальным подходящим будет 4. Проверим:

Случай 1. Петя ходит действием А. 4+1=5. Ваня ходит действием Б. 5*3+1=16. Ваня не выиграл.

Случай 2. Петя ходит действием Б. 3*4+1=13. Ваня ходит действием Б. 13*3=39. Ваня выиграл.

Несмотря на то, что если Петя пойдет действием  А, Ваня не выиграет, его победа всё равно возможна, если тот пойдет действием Б. А нас именно о случае, когда она возможна, и спрашивают.

Чтобы убедиться в верности рассуждений, проверим, нельзя ли взять еще меньшее число - 3:

Случай 1. Петя ходит действием А. 3+1=4. Ваня ходит действием Б. 3*4+1=13. Ваня не выиграл.

Случай 2. Петя ходит действием Б. 3*3+1=10. Ваня ходит действием Б. 3+10+1=31. Ваня не выиграл.

Таким образом, мы выяснили, что минимальным начальным количеством камней, когда возможна победа Вани первым ходом, является 4.

Bsn1704
var   s : string[50];
  i, j, k : word;  
 f : boolean;  
function isSpace(ch : char) : boolean;
begin   isSpace := false;  
if ch = ' ' then isSpace := true;
end;  
begin   f := false;  
   repeat     j := 0;
    writeln('введите строку, состоящую из 2 слов');
    readln(s);    
for i := 1 to length(s) do    
   if isSpace(s[i]) then  
    begin    
     inc(j);      
   k := i;       end;
     if j =1 then f := true;
    until f;    
write(copy(s, k + 1, length(s)), ' ', copy(s, 1, k - 1)); 
end.
недавно такую писала :)

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Дано натуральное число n. вычислить произведение первых n множителей. c++ или c#
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

ЮлияДаниил520
Nivanova995
Анастасия1097
dzo-dzo
magichands68
st-op767840
KIRILLSHURYGIN98
sharovaeln6
ren7869
phmad7
Шаленко
barkhatl-2p7
Алексеевна
m-zolotukhina2
Яковчук1911