Цикл for(выражение 1; выражение 2; выражение 3 ) принимает три аргумента:
1. Выражение 1 — объявление (и) или инициализация, ранее объявленной, переменной-счетчика, которая будет отвечать за истинность условия в цикле for
2. Выражение 2 — это условие продолжения цикла for, оно проверяется на истинность.
3. Выражение 3 изменяет значение переменной-счетчика, без выражения 3 цикл считается бесконечным
++ это операция инкремента, увеличение значения переменной на единицу;
-- это операция декремента, уменьшение значения переменной на единицу.
Тело цикла обрамляется фигурными скобочками, если тело цикла состоит из одного оператора ,то фигурные скобочки не нужны. В теле цикла расположен код, который будет выполняться на каждой итерации(шаге цикла)
Циклы могут содержать другие циклы(вложенные циклы), при этом сначала выполняются все итерации вложенного(вложенных) цикла(циклов), а затем происходит итерация родительского цикла(то есть того, в который вложены другие циклы).
Цикл for(выражение 1; выражение 2; выражение 3 ) принимает три аргумента:
1. Выражение 1 — объявление (и) или инициализация, ранее объявленной, переменной-счетчика, которая будет отвечать за истинность условия в цикле for
2. Выражение 2 — это условие продолжения цикла for, оно проверяется на истинность.
3. Выражение 3 изменяет значение переменной-счетчика, без выражения 3 цикл считается бесконечным
++ это операция инкремента, увеличение значения переменной на единицу;
-- это операция декремента, уменьшение значения переменной на единицу.
Тело цикла обрамляется фигурными скобочками, если тело цикла состоит из одного оператора ,то фигурные скобочки не нужны. В теле цикла расположен код, который будет выполняться на каждой итерации(шаге цикла)
Циклы могут содержать другие циклы(вложенные циклы), при этом сначала выполняются все итерации вложенного(вложенных) цикла(циклов), а затем происходит итерация родительского цикла(то есть того, в который вложены другие циклы).
program RawTcherv;
function IncPost(var I:integer):integer;
begin
Result:=I;
Inc(I);
end;
// из символов 1...9 из входной строки составить палиндром с минимальным значением
function (const S:string):string;
var
A:array[1..9] of byte;
I,J,Fino,Cur,Center:integer;
begin
FillChar(A{%H-},sizeof(A),0);
// вычисляем количество разных цифр, встреченных во введённой строке
For I:=1 to Length(S) do
if S[I] in ['1'..'9'] then
Inc(A[ord(S[I])-ord('0')])
else
break;
// максимальная длина палиндрома равна длине строки
Cur:=1;
Center:=-1;
SetLength(Result,Length(S));
// составляем палиндром. В начало вставляем половину всех цифр от мин. к макс.
For I:=1 to 9 do begin
// поиск минимального числа, которое можно вставить в центр
if (A[I] mod 2=1) and (Center<0) then
Center:=I;
// вставляем в начало строки половину символов
Fino:=A[I] div 2;
For J:=1 to Fino do
Result[IncPost(Cur)]:=chr(I+ord('0'));
// оставшуюся половину вставим потом
A[I]:=Fino;
end;
// вставляем центральный символ
if Center>0 then
Result[IncPost(Cur)]:=chr(Center+ord('0'));
// вставляем в обратном порядке символы палиндрома
For I:=9 downto 1 do begin
For J:=1 to A[I] do
Result[IncPost(Cur)]:=chr(I+ord('0'));
end;
// восстанавливаем длину строки
SetLength(Result,Cur-1);
end;
procedure Test(const S:string);
var
S1:string;
begin
S1:=(S);
Writeln('Orig=',S);
Writeln('Pal =',S1);
Writeln('Diff=',Length(S)-Length(S1));
Writeln;
end;
begin
Test('9998888776665432111');
Readln;
end.