Все удачные наборы команд должны включать остановку на отметке 12 футов. На отметку 1 фут робот может попасть с одной команды A; на отметку 2 фута - с команд AA и B (всего 2 набора команд); на отметку 3 фута - с команд AAA, AB, BA и C (4 набора). Так как за одну команду робот может переместиться на 1, 2 или 3 фута, то для подсчета количества наборов команд, позволяющих роботу попасть на отметки N > 3, можно использовать формулу K(N) = K(N-1)+K(N-2)+K(N-3). Напимер, на отметку 4 фута робот может попасть с отметок 3, 2 или 1 фут, следовательно, количество попасть на отметку 4 определяется как K(3)+K(2)+K(1). K(4) = K(3)+K(2)+K(1) = 4+2+1 = 7 K(5) = K(4)+K(3)+K(2) = 7+4+2 = 13 K(6) = K(5)+K(4)+K(3) = 13+7+4 = 24 K(7) = K(6)+K(5)+K(4) = 24+13+7 = 44 K(8) = K(7)+K(6)+K(5) = 44+24+13 = 81 K(9) = K(8)+K(7)+K(6) = 81+44+24 = 149 K(10) = K(9)+K(8)+K(7) = 149+81+44 = 274 K(11) = K(10)+K(9)+K(8) = 274+149+81 = 504 K(12) = K(11)+K(10)+K(9) = 504+274+149 = 927 Так как вторая часть пути робота также имеет длину 12, то общее количество удачных наборов команд = 927*927 = 859 329
rusmoney92
28.11.2022
PascalABC.NET 3.3.5, сборка 1650 от 01.04.2018 Внимание! Если программа не работает, обновите версию!
procedure BubbleSort(a:array of integer; descending:Boolean:=False; // нужна ли сортировка по невозрастанию u:integer:=-1; // начальный индекс v:integer:=-1); // конечный индекс // Простая пузырьковая сортировка элементов с индексами с u по v begin // обеспечим корректность параметров u и v if u<0 then u:=0; var n:=a.Length; if (v<0) or (v>=n) then v:=n-1; if u>v then Swap(u,v) else if u=v then Exit; // собственно, сортировка if descending then begin // по невозрастанию for var i:=v-1 downto u do for var j:=u to i do if a[j]<a[j+1] then Swap(a[j],a[j+1]) end else begin for var i:=v-1 downto u do // по неубыванию for var j:=u to i do if a[j]>a[j+1] then Swap(a[j],a[j+1]) end end;
begin Write(': '); var a:=ArrRandom; a.Println; var (imin,imax):=(a.IndexMin,a.IndexMax); var b:=Copy(a); Write('1: '); BubbleSort(b,False,0,imax); b.Println; b:=Copy(a); Write('2: '); BubbleSort(b,False,imin); b.Println; b:=Copy(a); Write('3: '); BubbleSort(b,True,imax,imin); b.Println end.