Распаковка массива

Задача

Вводится массив, представляющий собой сжатие серий нулей и единиц, где каждый элемент обозначает количество элементов в очередной серии нулей или единиц. Но если первым элементом вводимого массива является 0, значит первая серия распакованного массива - единицы. Например:

  • массив [2, 3] распаковывается как 00111,
  • массив [0, 4, 1, 2] распаковывается как 1111011.

Требуется написать программу распаковки вводимого массива.

Решение

Если первый элемент массива 0, то в дальнейшем следует делать перебор массива со второго элемента (i := 2) и сначала выводить на экран единицы (j := 1). Если же первый элемент массива другой, то его перебор начинаем с первого элемента и сначала выводим нули.

Перебираем массив. На каждой итерации выводим на экран количество нулей или единиц, соответствующее очередному значению элемента массива. После этого обращаем значение переменной j (с 1 на 0 или наоборот).

Программа на языке Паскаль: 

const M = 10;
var   
    a: array[1..M] of byte;
    q, i, j, count: byte;
begin
    write('количество элементов массива: ');
    readln(q);
    write ('вводите элементы через пробел: ');
    for i:=1 to q do begin
        read(a[i]);
    end;
    if a[1] = 0 then begin
        i := 2;
        j := 1;
    end
    else begin
        i := 1;
        j := 0;
    end;
    for i:=i to q do begin
        for count:=1 to a[i] do
            write(j);
        if j = 1 then j:=0
        else if j = 0 then j:=1;
    end;
    writeln;
 
end.

Пример выполнения кода:

количество элементов массива: 5
вводите элементы через пробел: 0 4 5 4 3 
1111000001111000

Тема

Одномерные массивы

Уровень

Комбинированные задачи

Добавить комментарий