Program Program1; Var a:array [1..10] of integer; i,min,max, Nmin, Nmax:integer;
//Процедура рекурсивной инвресии массива procedure InvertMas(nac,kon:integer); var temp:integer; begin temp:=a[nac]; a[nac]:=a[kon]; a[kon]:=temp; if nac+1<kon-1 then InvertMas(nac+1,kon-1); end;
begin randomize; //Заполняем массив случайнами числами и выводим его на экран writeln('Массив до инверсии:'); for i:=1 to 10 do begin a[i]:=random(100); writeln('a['+inttostr(i)+']='+inttostr(a[i])); end; //Находим самый левый минимальный элемент в первой половине массива и номер этого элемента Nmin:=1; min:=a[Nmin]; for i:=1 to 5 do if min>a[i] then begin min:=a[i]; Nmin:=i; end; //Находим самый правый максимальный элемент во второй половине массива и номер этого элемента Nmax:=10; max:=a[Nmax]; for i:=10 downto 6 do if max<a[i] then begin max:=a[i]; Nmax:=i; end;
writeln; writeln('Инвертируем часть массива с '+inttostr(Nmin)+' по '+inttostr(Nmax)+' элемент'); //Инвертируем часть массива с Nmin по Nmax invertmas(Nmin,Nmax);
//Выводим массив после инверсии на экран writeln; writeln('Массив после инверсии:'); for i:=1 to 10 do writeln('a['+inttostr(i)+']='+inttostr(a[i]));
1) АВ = 40 / 20 = 2 часа (минимум) АС + СВ = 30 / 30 + 25 / 20 = 2,25 часа
2) Рассмотрим остатки камней и кто выигрывает. Игрок - тот кто сейчас ходит, противник - тот кто ходит следующим. Рассматриваются только разумные ходы 1 камень - игрок однозначно проигрывает так как ход таки делать надо 2, 3, 4 камня - легко свести к ситуации 1 камня, противник однозначно проигрывает 5 камней - сколько не бери, все равно попадешь в ситуацию 2-4 камня, игрок однозначно проигрывает 6 камней - если свести ситуацию к ситуации 5 камней, то противник однозначно проиграет, потому надо взять 1 камень
Program Program1;
Var
a:array [1..10] of integer;
i,min,max, Nmin, Nmax:integer;
//Процедура рекурсивной инвресии массива
procedure InvertMas(nac,kon:integer);
var
temp:integer;
begin
temp:=a[nac];
a[nac]:=a[kon];
a[kon]:=temp;
if nac+1<kon-1 then InvertMas(nac+1,kon-1);
end;
begin
randomize;
//Заполняем массив случайнами числами и выводим его на экран
writeln('Массив до инверсии:');
for i:=1 to 10 do
begin
a[i]:=random(100);
writeln('a['+inttostr(i)+']='+inttostr(a[i]));
end;
//Находим самый левый минимальный элемент в первой половине массива и номер этого элемента
Nmin:=1;
min:=a[Nmin];
for i:=1 to 5 do
if min>a[i] then
begin
min:=a[i];
Nmin:=i;
end;
//Находим самый правый максимальный элемент во второй половине массива и номер этого элемента
Nmax:=10;
max:=a[Nmax];
for i:=10 downto 6 do
if max<a[i] then
begin
max:=a[i];
Nmax:=i;
end;
writeln;
writeln('Инвертируем часть массива с '+inttostr(Nmin)+' по '+inttostr(Nmax)+' элемент');
//Инвертируем часть массива с Nmin по Nmax
invertmas(Nmin,Nmax);
//Выводим массив после инверсии на экран
writeln;
writeln('Массив после инверсии:');
for i:=1 to 10 do writeln('a['+inttostr(i)+']='+inttostr(a[i]));
end.
АВ = 40 / 20 = 2 часа (минимум)
АС + СВ = 30 / 30 + 25 / 20 = 2,25 часа
2) Рассмотрим остатки камней и кто выигрывает. Игрок - тот кто сейчас ходит, противник - тот кто ходит следующим. Рассматриваются только разумные ходы
1 камень - игрок однозначно проигрывает так как ход таки делать надо
2, 3, 4 камня - легко свести к ситуации 1 камня, противник однозначно проигрывает
5 камней - сколько не бери, все равно попадешь в ситуацию 2-4 камня, игрок однозначно проигрывает
6 камней - если свести ситуацию к ситуации 5 камней, то противник однозначно проиграет, потому надо взять 1 камень