Форум » Динамическое программирование » 23 задание (3613 генератор) » Ответить

23 задание (3613 генератор)

Писаренко: Не могу на сайте Полякова К. найти решение таких задач. Перебор здесь делать долго. Подскажите, пожалуйста. (№ 3613) (Е. Джобс) Исполнитель Простачок преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера: 1. Прибавить 2 2. Прибавить 3 3. Умножить на 2 Первая команда увеличивает число на 2, вторая – на 3, третья – увеличивает число вдвое. Сколько различных чисел может быть получено из числа 10 всеми возможными алгоритмами длиной 5 команд?

Ответов - 12

polyakovss: Здравствуйте! Вот вариант решения: [pre2] L = [10] for k in range(5): n = len(L) for i in range(n): L.append(L[0]+2) L.append(L[0]+3) L.append(L[0]*2) L.remove(L[0]) print(len(set(L))) [/pre2]

IrjkfIrjkf15: polyakovss Не подскажете как решается эта задача? № 2765) Исполнитель Калькулятор преобразует число на экране. У исполнителя есть три команды, которым присвоены номера: 1. Прибавить 1 2. Прибавить 4 3. Умножить на 2 Программа для исполнителя Калькулятор – это последовательность команд. Сколько существует программ, состоящих из 7 команд, для которых при исходном числе 3 результатом является число 27?

IrjkfIrjkf15: IrjkfIrjkf15 Спасибо дошло def f(x,l,t=[]): if l==7: return t+[x] else: return f(x+1,l+1,t)+f(x+4,l+1,t) +f(x*2,l+1,t) a=f(3,0,[]) print(sorted(a).count(27))


IrjkfIrjkf15: IrjkfIrjkf15 Спасибо дошло def f(x,l,t=[]): if l==7: return t+[x] else: return f(x+1,l+1,t)+f(x+4,l+1,t) +f(x*2,l+1,t) a=f(3,0,[]) print(sorted(a).count(27))

Алмаз: Спасибо!

Писаренко: Спасибо. Была бы очень благодарна за программу на Паскале. (№ 3447) (С.С. Поляков) У исполнителя Калькулятор есть три команды, которым присвоены номера: 1. Прибавить 1 2. Прибавить 5 3. Умножить на 3 Сколько разных чисел может быть получено из числа 1 с помощью программ, состоящих из 7 команд?

polyakovss: Здравствуйте! Можно, например, так на PascalABC.Net (№ 3447): [pre2]## var L := Lst(1); // 1 - исходное число for var k := 0 to 7-1 do begin // 7 - количество команд var n := L.Count; for var i := 0 to n-1 do begin L.Add(L[0]+1); L.Add(L[0]+5); L.Add(L[0]*3); L.RemoveAt(0); end; end; Writeln(L.Distinct.Count);[/pre2]

Alex61: polyakovss пишет: Можно, например, так на PascalABC.Net (№ 3447): А лучше так оформить: [pre2]## var (m, n) := (1, 7); var L := Lst(1); loop n do begin loop L.Count do begin L.Add(L[0] + 1); L.Add(L[0] + 5); L.Add(L[0] * 3); L.RemoveAt(0) end end; L.Distinct.Count.Print [/pre2]

Агаркова: Здравствуйте. Да, пожалуйста, если можно, то на Паскале такой тип заданий. Пробовала делать в экселе перебором, но долго. Для 4-х команд еще организовала и решила, но вот для 7 команд, понимаю, что в условиях экономии времени просто нереально будет без ошибок выполнить.

Anvikm: Здравствуйте! [pre2] def f(x,l,t=[]): if l==5: return t+[x] else: return f(x+2,l+1,t)+f(x+3,l+1,t)+f(x*2,l+1,t) a=f(10,0,[]) print(len(set(a))) [/pre2]

Оксана2021: Подскажите, где ошибка? 116) (С.С. Поляков) Исполнитель Калькулятор преобразует число на экране. У исполнителя есть три команды, которым присвоены номера: 1. Прибавить 1 2. Прибавить 5 3. Умножить на 3 Сколько разных чисел может быть получено из числа 1 с помощью программ, состоящих из 4 команд? [pre2] var a: array of integer; var i:=0; function f(x, k:uint64):uint64; begin if x > 4 then F:=0; if k = 4 then begin i+=1; a[ i]:=f(x,k); end else F:=0; if x < 4 then F:=f(x+1,k+1)+f(x+5,k+1)+f(x*3,k+1); end; begin f(1,0); print (f(1,0)); for var j:=1 to i do print(a[j]) end.[/pre2]

Чаговец: [pre2]var l:=new List<integer>; procedure f(a,n:integer); begin if n<7 then begin f(a+1,n+1); f(a+5,n+1); f(a*3,n+1); end else if n=7 then l.Add(a); end; begin f(1,0); L.Distinct.Count.Print; end.//393 [/pre2]



полная версия страницы