Виктория1950
15.11.2020 06:58

50 ! решите по программированию.

: одномерный японский кроссворд

не так давно петя узнал, что такое японский кроссворд. японский кроссворд — это изображение, представляемое таблицей размера a × b квадратных клеток, каждая из которых имеет либо белый, либо черный цвет. слева от строк и сверху от столбцов располагаются числа, которые шифруют данную строку или столбец. количество чисел показывает, сколько групп чёрных клеток находятся в соответствующей строке или столбце, а сами числа — сколько идущих подряд чёрных клеток содержит каждая из этих групп.

петя счел общий случай японского кроссворда слишком сложным и нарисовал строку из n клеток (то есть японский кроссворд размера 1 × n), которую он хочет зашифровать числами так же, как в японском кроссворде.

пример шифрования одной строки японского кроссворда.

петя найти числа, шифрующие нарисованную им строку кроссворда.

входные данные

в первой строке содержится целое положительное число n (1 ≤ n ≤ 100) — длина строки. во второй строке содержится строка, состоящая из n символов 'b' или 'w', ('b' соответствует черной клетке, 'w' — белой клетке в строке, нарисованной петей).

выходные данные

в первой строке должно содержаться целое неотрицательное число k — количество чисел, шифрующих строку, то есть количество групп черных клеток в строке.

во второй строке должно содержаться k целых чисел, шифрующих строку, то есть соответствующих размерам групп последовательных черных клеток в порядке слева направо.

пример:

ввод:

3

bbw

вывод:

1

2

p.s. если кому надо, то вот словесное описание решения, которое я не понимаю: в этой нужно посчитать длину каждого блока из подряд идущих чёрных клеток. делать это можно так: пройдёмся циклом с переменной i по нашей строке слева направо, если мы встретили чёрную клетку, то возьмём переменную j = i, и пока j <  n и s[j] = 'b', мы прибавляем j. далее мы добавляем в ответ длину получившегося отрезка (она равна j - i), и переприсваеваем в i значение j. после того, как цикл по i закончит выполнение, можно выводить ответ.

асимптотика такого решения — o(n) времени и памяти.

напишите программу на языке pascalabc.net (желательно) или "c", максимально понятно и просто.

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
чичекадиль
05.05.2023 09:17

ответы и объяснения

gfhjkmgfhjkm20

Gfhjkmgfhjkm20Старший Спамаут

2) F7 : H11

Объяснение:

Диапазон ячеек - группа ячеек, задаваемая адресами верхней левой и нижней правой ячеек, разлелённых двоеточием (А1:С3).

Адрес ячейки образуется из имени столбца и строки на пересечении которых находится ячейка (А1).

Первый (Al : F4) и третий (12 : K5a) вариант отбрасываем, т.к. AI и 12 не являются адресами ячеек.

Четвертый вариант (D8 : F9) содержит 6 ячейки - D8, D9, Е8, Е9, F8, F9.

Второй вариант (F7 : H11) содержит 15 ячеек - F7, F8, F9, F10, F11, G7, G8, G9, G10, G11, H7, H8, H9, F10, H11.

Нажми, чтобы рассказать другим,

0,0(0 оценок)
Ответ:
kajaiuw
19.04.2020 12:05

procedure CalcArray (const Ax: array of Integer; var S: Integer; var M: Real);  // var в параметрах означает, что переменная используется для возврата значения

var

 i, c: Integer;

begin

 S := 0;

 c := 0;

 for i := 0 to High (Ax) do begin

   S := S + Ax [i];   // здесь накапливаем сумму элементов

   c := c + 1;

 end;

 M := S / c;   // когда найдена сумму, рассчитываем среднеарифметическое

end;

var

 A: array [0..4] of Integer;     // размерность массивов можно делать любой, но начинаться с 0

 B: array [0..14] of Integer;

 C: array [0..9] of Integer;

 i, s: Integer;

 m: Real;

begin

 SetConsoleCP (1251);

 SetConsoleOutputCP (1251);

 Randomize;   // инициализация датчика случайных чисел

 WriteLn ('Массив 1:');

 for i := Low (A) to High (A) do begin

   A [i] := Random (10);   // заполняем элементы массива случайными значениями

   Write (IntToStr (A [i]) + ' ');   // выводим их для вызов процедуры

 WriteLn;   // показываем возвращаемые из функции переменные

 WriteLn ('Сумма элементов = ' + IntToStr (s));

 WriteLn ('Среднеарифметическое = ' + FloatToStr (m));

 WriteLn;   // аналогично поступаем с другими массивами

 WriteLn ('Массив 2:');

 for i := Low (B) to High (B) do begin

   B [i] := Random (10);

   Write (IntToStr (B [i]) + ' ');

 end;

 CalcArray (B, s, m);

 WriteLn;

 WriteLn ('Сумма элементов = ' + IntToStr (s));

 WriteLn ('Среднеарифметическое = ' + FloatToStr (m));

 WriteLn;

 WriteLn ('Массив 3:');

 for i := Low (C) to High (C) do begin

   C [i] := Random (10);

   Write (IntToStr (C [i]) + ' ');

 end;

 CalcArray (C, s, m);

 WriteLn;

 WriteLn ('Сумма элементов = ' + IntToStr (s));

 WriteLn ('Среднеарифметическое = ' + FloatToStr (m));

end.

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота