Некоторый ал¬го¬ритм из одной це¬поч¬ки сим¬во¬лов по¬лу¬ча¬ет новую це¬поч¬ку сле¬ду¬ю¬щим образом. Сна¬ча¬ла вы¬чис¬ля¬ет¬ся длина ис¬ход¬ной це¬поч¬ки символов; если она нечётна, то дуб¬ли¬ру¬ет¬ся сред¬ний сим¬вол це¬поч¬ки символов, а если чётна, то в се¬ре¬ди¬ну це¬поч¬ки до-бав¬ля¬ет¬ся буква А. В по¬лу¬чен¬ной це¬поч¬ке сим¬во¬лов каж¬дая буква за¬ме¬ня¬ет¬ся буквой, сле-ду¬ю¬щей за ней в рус¬ском ал¬фа¬ви¬те (А — на Б, Б — на В и т. д., а Я — на А). По¬лу¬чив¬ша¬я-ся таким об¬ра¬зом це¬поч¬ка яв¬ля¬ет¬ся ре¬зуль¬та¬том ра¬бо¬ты алгоритма.
Например, если ис¬ход¬ной была це¬поч¬ка КОТ, то ре¬зуль¬та¬том ра¬бо¬ты ал¬го¬рит¬ма будет це¬поч¬ка ЛППУ, а если ис¬ход¬ной была це¬поч¬ка ВАНЯ, то ре¬зуль¬та¬том ра¬бо¬ты ал¬го¬рит¬ма будет це¬поч¬ка ГББОА.
Дана це¬поч¬ка сим¬во¬лов ЛЮК. Какая це¬поч¬ка сим¬во¬лов получится, если к дан¬ной це-поч¬ке при¬ме¬нить опи¬сан¬ный ал¬го¬ритм два¬жды (т. е. при¬ме¬нить ал¬го¬ритм к дан¬ной цепочке, а затем к ре¬зуль¬та¬ту вновь при¬ме¬нить алгоритм)? Рус¬ский алфавит:
1. При выполнения цикла каждая из троек 8 будет заменена на одну 9. Значит у нас получится строка длиной в 334 символа, где 333 девятки и последний символ - восьмерка
2. Далее 333 девятки заменятся на 111 восьмерок плюс последняя восьмерка - всего получим 112 восьмерок
3. Из 112 восьмерок получится 37 девяток и одна восьмерка
4. И 37 девяток получим 12 восьмерок плюс одна девятка и плюс последняя восьмерка
5. 12 восьмерок дадут 4 девятки плюс последние 9 и 8
6. И наконец получаем строку 8998
ответ: 8998
i,k,N : Integer;
Begin
For i:=0 to 6 do m[i]:=0;
Readln(N);
k:=6;
While N>0 do
Begin
If N>=Power(2,k) then
Begin
N:=N-Trunc(Power(2,k));
Inc(m[k]);
end else Dec(k);
end;
For i:=0 to 6 do Writeln(Power(2,i),' ',m[i],' шт.');
end.
Еще вариант:
Const
NN = 7;
money : array[1..7] of Integer = (1,2,4,8,16,32,64);
Var m : array[1..NN] of Integer;
i,k,N : Integer;
Begin
For i:=1 to NN do m[i]:=0;
Readln(N);
k:=NN;
While N>0 do
Begin
If N>=money[k] then
Begin
N:=N-money[k];
Inc(m[k]);
end else Dec(k);
end;
For i:=1 to NN do Writeln(money[i],' ',m[i],' шт.');
end.