Var n, i, z, step, k, g, retry: integer; // n - количество карточек (вводит пользователь), остальное - обычные счетчики циклов c: array[1..300000] of integer; // массив, в котором хранятся все наши карточки
begin write('Введите количество карточек: '); // рекомендую для теста вводить около десяти , т.к. больше вероятность, что попадутся одинаковые числа и вы сможете увидеть результат readln(n); writeln(); writeln('Карточки: '); for z := 1 to n do begin c[ z ] := random(10); // создается <em>n</em> карточек //c[ 1 ] := 3; эти строки я закомментировал //c[ 2 ] := 0; их можно удалить //c[ 3 ] := 7; //c[ 4 ] := 6; просто проверял работу своими значениями //c[ 5 ] := 6; //c[ 6 ] := 3; //c[ 7 ] := 4; //c[ 8 ] := 0; //c[ 9 ] := 2; //c[ 10 ] := 2; write( '|' , c[ z ], '| ' ); // вывод обрамленных карточек end; step := 0; // переменная, которая считает шаги writeln();
for retry := 1 to 11 do begin // главный цикл, который прогоняет второстепенный цикл 11 кругов, для того, чтобы исключить вероятность, что "сзади" остались одинаковые числа
for z := 1 to n do begin // второстепенный цикл if z >= n then break // в случае конца выходим из цикла и отдаем управление программой главному циклу (тот что выше) else begin // начинаем проверять карточки слева направо, пока не достигнут конец. в случае оного - выполняется действие выше if c[ z ] = c[ z + 1 ] then begin // сравниваем соседние карточки. если они равны, то начинаем делать шаг inc(step); writeln(); writeln( step, ' шаг ', retry, ' круг: '); inc( c[ z ] ); for g := 1 to ( n - z ) do c[ z + g ] := c[ z + g + 1 ]; // удаляем две одинаковых карточки, оставляем одну, увеличенную на 1 n := n - 1; // сокращаем количество карточек на 1 writeln(); for k := 1 to n do write( '|' , c[ k ], '| ' ); // вывод каждого шага writeln(); end; end; end; end; <span>writeln();
Var s,sw: string; i,j,bst: integer; begin s:='строка для решения арба еле реестр'; bst:=1; sw:=''; write('строка для поиска - '); writeln(s); for i:=1 to length(s) do begin if (Ord(s[i])=32) then begin if (s[bst]=s[i-1]) then begin for j:=bst to i-1 do sw:=sw+s[j]; writeln('найдено слово - ',sw); sw:=''; end; bst:=i+1; end; end; if (s[bst]=s[length(s)]) then begin for i:=bst to length(s) do sw:=sw+s[i]; writeln('найдено слово - ',sw); end; <span>end.
115:2=57 и ост 1 57:2=28 и ост 1 28:2=14 и ост 0 14:2=7 и ост 0 7:2=3 и ост 1 3:2=1 и ост 1 И у нас остается 1 которую мы вводим в конец Теперь "Переворачиваем" число и у нас получается 1110011 Ответ: 1110011