В кодировке Unicode 65536 символов
65536=^16 значит 1 символ содержит 16 бит=2байта
2*75=150байт
1 способ
Применим метод уменьшения в два раза области неопределенности(путь к стелажу выделен жирным шрифтом):
16
8-8
4-4 4-4
2-2 2-2 2-2 2-2
1-1 1-1 1-1 1-1 1-1 1-1 1-1 1-1
МЫ потратили 4 бита информации на поиск нужного стеллажа, теперь нащдо найти нужную нам полку:
6
3-3
2-1 2-1
1-1 1 1-1 1
Потрачено еще 3 бита информации. Всего информации 4+3 равно 7 бит информации.
2 способ:
Воспользуемся формулой: 2
2^i=N
Количество информации о нахождении стеллажа:
2^4=16
i=4 бита
Количество информации о нахождении полки:
2^i6 поэтому возьмем число 2^i так чтобы результат находился рядом с числом 6. Так как если число будет меньше 6 то мы не сможем точно получить информация, то 2^i должно быть больше 6. Значит:
2^3=8
I=3
4+3=7 бит информации
Кузнечик сидит в точке 0. Будем считать, что количество способов как попасть в точку ноль - 1.
У нас всего 6 кочек, 6 - конечная.
Мы перемещаемся либо на последующую (+1), либо через одну (+2), либо через две (+3). То есть если мы были на кочке один и прыгнули через две кочки, то попадем в кочку 4 (1 + 3).
Начнём считать.
0 - мы на первом берегу. Наши кочки: 1, 2, 3, 4, 5 и 6 обозначены СЛЕВА. 7 этапом мы прыгнем на другой берег.
0: 1 способ
1: [0] = 1 сп.
2: [0,1] = 1 + 1 = 2 сп.
3: [0,1, 2] = 1 + 1 + 2 = 4 сп.
4: [1, 2, 3] = 1 + 2 + 4 = 7 сп.
5: [2, 3, 4] = 2 + 4 + 7 = 13 сп.
6: [3, 4, 5] = 4 + 7 + 13 = 24 сп.
7: [4, 5, 6] = 7 + 13 + 24 = 44 сп.
Всего существует 44 способа как перебрать на другой берег болота.
P.S. В квадратных скобка [] обозначены индексы из каких точек мы можем попасть в эту точку. Достаточно сложить количество путей тех точек и мы получим количество путей для данной точки.
Var
n, k, i, imax, j: integer;
a: array[1..100]of integer;
begin
randomize;
n := random(30) + 10;
for i := 1 to n do
begin
a[i] := Random(30);
write(a[i], ' ');
end;
writeln();
{сортировочка}
for i := 1 to n - 1 do
begin
imax := i;
for j := i + 1 to n do
if a[j] > a[imax] then
imax := j;
k := a[i];
a[i] := a[imax];
a[imax] := k;
end;
for i := 1 to n do
write(a[i], ' ');
k := 0;
for i := 2 to n - 1 do
if (a[i] <> a[i - 1]) and (a[i] <> a[i + 1]) then
k := k + 1;
if a[1] <> a[2] then k := k + 1;
if a[n] <> a[n - 1] then k := k + 1;
writeln();
writeln('No doubles - ', k);
end.
int main(int argc, char* argv[])
{
char s[256] = {0};
char prevChar = {0};
std::cin >> s;
int len = strlen(s);
prevChar = s[0];
int count = 1;
for (int i = 1; i < len+1; i++)
{
if (s[i] == prevChar) {
count++;
} else {
printf("%d %c\n", count, prevChar);
count = 1;
prevChar = s[i];
}
}
return 0;
}