например мне нужно получить число 12...
В массиве есть такие числа: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144
12 = 8 + 3 + 1
или
2 = 1+1
И т. д
Другие языки программирования и технологии
Как получить нужное число из суммы нескольких чисел в массиве?

Перебираем числа Фибоначчи от заведомо большего к меньшим и, если некоторое число Фибоначчи <= 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.
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.
Судя по массиву (числа Фибоначчи)
любое число может быть представлено как сумма нескольких чисел Фибоначчи
любое число может быть представлено как сумма нескольких чисел Фибоначчи
Дмитрий Терещенко
Да знаю, но вот я не знаю как это реализовать...
#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
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
только перебором.
если массив отсортирован, то перебирать можно только часть
если массив отсортирован, то перебирать можно только часть
Похожие вопросы
- Разделить массив с числами на несколько массивов, чтобы сумма чисел в массивах была равна.
- Помогите найти алгоритм подбора множителей к числам заданного массива, сумма произведений которых равна заданному числу
- Помогите найти все возможные вариации положительных и отрицательных чисел в массиве.
- 2. Отсортировать массив из n чисел и подсчитать количество уникальных чисел в массиве. на паскале
- Из массива JJ(100) в массив NN(100) перенести числа(элементы массива): сначала нечетные, а затем четные.
- Найти самые частые 4 числа в массиве
- Заполните массив случайными числами. Отсортируйте массив по возрастанию методом пузырька.
- Помогите пожалуйста!Паскаль. Дано натуральное число N. Получить наименьшее число вида 2(m в степени), превосходящее N.
- написать программу на С++, которая вычисляет колличество положительных чисел в массиве?
- Язык си, не понял несколько моментов по массивам и строкам