Генерация всех комбинаций сумм - PullRequest
0 голосов
/ 31 мая 2011

Учитывая набор из 6 чисел, например, 1,5,8,9,2,6 и 2 операндов, например, + и - мне было интересно, как вы будете генерировать все возможные действительные суммы, например, 1 + 8 = 9 и т. Д..

Числа могут быть положительными числами 0-9, а операнды могут быть + - / * в квадрате и квадратный корень

Если кто-нибудь может помочь, я был бы очень признателен.

Спасибо

Ответы [ 3 ]

2 голосов
/ 31 мая 2011

, поскольку это множество, а диапазон чисел равен [0,9] - тривиальное решение будет возвращаться назад, требуя не более 3 ^ n
псевдокод:

solution(set,aFormula,op1,op2):
  if set == []: print calculate(aFormula)
  else:
     solution(set[1-set.end],aForumula,op1,op2)
     solution(set[1-set.end],op1(aFormula,set[0]),op1,op2)
     solution(set[1-set.end],op2(aFormula,set[0]),op1,op2)

примечание - вам может потребоваться дополнительная обработка для унарных операций, но это не сильно изменит алгоритм.

1 голос
/ 31 мая 2011

хорошо, так как есть только 6 * 5 * 4 (выбор чисел из набора) * 4 (операнды), вы можете легко сгенерировать все возможные перестановки и проверить каждую на правильность.Я не могу предоставить код для цели c, но вы можете просто использовать вложенные циклы, чтобы получить все возможные перестановки, выполнить вычисления и распечатать перестановку, если результат вычисления соответствует числу, которое вы выбрали как «результат» в перестановке

1 голос
/ 31 мая 2011

"положительное число 0-9"

0 не является положительным числом.

"операнды могут быть + - / * квадрат и квадратный корень"

Квадрат и квадратный корень принимают только один параметр, так как применить это к двум элементам вашего списка?

Поскольку вы не указали здесь ни одного языка, решение для добавления, как указано в вашем сообщении:

a = [1, 5, 8, 9, 2, 6]
print set ( [x + y for x in a for y in a] )

Это позволяет суммам одного и того же элемента с самим собой, если это поведение не предназначено, измените его соответствующим образом. При необходимости используйте другие операторы.

Очень подробный пример в C:

#include <stdio.h>

void main ()
{
    int list [6] = {1,5,8,9,2,6};
    int i, j;
    for (i = 0; i < 6; i++)
        for (j = i + 1; j < 6; j++)
            printf ("%d + %d = %d\n", list [i], list [j], list [i] + list [j] );
}
...