Другие языки программирования и технологии

Как получить нужное число из суммы нескольких чисел в массиве?

например мне нужно получить число 12...
В массиве есть такие числа: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144
12 = 8 + 3 + 1
или
2 = 1+1
И т. д
Коля Прялочников
Коля Прялочников
83 253
Лучший ответ
Перебираем числа Фибоначчи от заведомо большего к меньшим и, если некоторое число Фибоначчи <= n, значит, это число Фибоначчи входит в запись числа n. Тогда выводим на печать это число Фибоначчи, отнимаем его от n и продолжаем, пока в результате не окажется n=0.

program f2;
const m=45;
var n,i:integer; f:array[1..m]of longint;
begin
write('n: '); readln(n);
{ генеририруем ряд Фибоначчи: }
f[1]:=1; f[2]:=2; for i:=3 to m do f[i]:=f[i-1]+f[i-2];
{ считаем по алгоритму: }
i:=m;
while n>0 do begin if f[i]<=n then begin write(f[i],' '); n:=n-f[i] end; i:=i-1 end;
writeln; readln
end.
Yuri Simonov
Yuri Simonov
72 384
Судя по массиву (числа Фибоначчи)
любое число может быть представлено как сумма нескольких чисел Фибоначчи
Дмитрий Терещенко Да знаю, но вот я не знаю как это реализовать...
#python 2.7.12

LIST = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
N = 12

RESULT = []

def checkList (L) :
if sum(L) == N and L not in RESULT:
RESULT.append(L)
return
if len(L) <= 1:
return
if min(L) > N:
return
for i in range(0, len(L)):
checkList(L[:i] + L[(i+1):])

LIST = sorted(LIST)
i = 0
while i < len(LIST):
if LIST[i] > N:
checkList(LIST[:i])
break
i += 1

print("\n".join(["+".join(map(str, R)) for R in RESULT]))

1+3+8
1+1+2+8
1+1+2+3+5
0+1+3+8
0+1+1+2+8
0+1+1+2+3+5
только перебором.
если массив отсортирован, то перебирать можно только часть
JL
John Life
25 516

Похожие вопросы