Алгоритм, чтобы найти, какое число в списке суммируется до определенное число

У меня есть список номеров. У меня тоже есть определенная сумма. Сумма сделана из нескольких чисел из моего списка (я могу / не могу знать, из скольких чисел она сделана). Существует ли быстрый алгоритм получения списка возможных номеров? Написано на Python было бы здорово, но псевдокод тоже хорош. (Я пока не могу прочитать ничего, кроме Python: P)

Пример

list = [1,2,3,10]
sum = 12
result = [2,10]

ПРИМЕЧАНИЕ:

function abc( string format ) {
  if (format == "a") { // this is a string, I shouldn't have used single quote, sorry for the confusion
    classx::a t;
    doit(t);
  }
  if (format == "b"){
    classx::b t;
    doit(t);
  }
  if (format == "c"){
    classx::c t;
    doit(t) 
  }
  if (format == "d"){
    classx::d t; 
    doit(t);
  }
}

В настоящее время существует множество функций doit () с различным типом

function doit( classx:a ) {
   different code for a
}

function doit( classx:b ) {
   different code for b
}

... и т. Д.

Как видите, большая часть кода реплицируется. Однако я не могу понять, как уменьшить слова. Обратите внимание, что : doit (x) перегружен другим типом. Класс a, b, c, d является производным от класса с именем «X».

Я могу создать указатель типа classx :: X:

classx::X *t;
if (format == "a") t = new classx::a
if (format == "b") t = new classx::b
if (format == "c") t = new classx::c
if (format == "d") t = new classx::d
doit(*t)

, но тогда все равно нужно написать doit () для типа classx :: X с кучей «если тогда» и привести к правильному типу ... поскольку C ++ не может автоматически определять и приводить к правильному типу.

Интересно, есть ли более быстрый / умный способ сделать это. Заранее спасибо.

5
задан Steven Sudit 6 August 2010 в 13:44
поделиться