2012-01-18 2 views
-2

Мой учитель сказал мне создать алгоритм для решения этой проблемы, но я не могу понять, как я мог бы сделать эту работу. Не могли бы вы мне помочь?Сложная математическая задача/программирование

(a + b)(b + c)(c + a) = 2012 

Там может быть несколько решений этой проблемы, но с> = Ь> = а

+5

Невозможно решить 3 вложенных цикла? – batbaatar

+1

Когда проблема небольшая, переборьте ее. – pad

+0

У меня есть ответы -249 250 и 253. Я вычислил это на бумаге, три вложенные петли заняли у меня много времени, так что это не очень хорошо. – MJA

ответ

3

Я совершенно уверен, что есть более подробная информация дается, например, как его решить (например, с использованием пробной версии и ошибки или алгоритма решателя). Любое слово по этому поводу?

С данной информацией:

  • У вас есть 3 переменные, так что вам нужно 3 уравнений для решения этой проблемы. Это не так. Это приводит к выводу, что 2 из 3 переменных могут стать (почти) любыми значениями (например, две из трех переменных не должны быть 0).

  • Учитывая то, что мы определили выше (2 переменные не будут вычислены, но задается пользователем - или иначе просто установить на любое значение), это довольно легко изменить уравнение так это соответствующий классический квадратное уравнение:

    (а + б) * (B + C) * (с + а) = 2012

    (а + б) * (B + C) * (с + а) - 2012 = 0

    (a + b) * (a + c) - 2012/(b + c) = 0

    a * a + a * c + a * b + b * c - 2012/(b + С) = 0

    a² + (б * в) * а + Ь * с - 2012/(Ь + с) = 0

    Не забывайте будучи единственной реальной переменной, мы должны определить, !

  • Теперь у нас есть простая формула, которую мы можем решить с помощью школьной математики.

    Стандартная формула x² + px + q = 0 может быть решена численным образом: x1 = -p/2 - sgn(p) * sqrt(pow(p/2, 2) - q) и x2 = q/x1

  • Сравнивая обе формулы нужно просто связать:

    х =

    р = Ь * С

    q = b * c - 2012/(b + c)

  • То, что сейчас отсутствует, - это просто решение приведенного выше уравнения.

Всё. Хотя подумайте, что прошло довольно много времени, так как я сделал это в последний раз, поэтому я мог ошибаться где-то по дороге. Поэтому, пожалуйста, решите сами уравнения, чтобы проверить это. :)

Редактировать: Чтобы решить эту проблему с помощью c> = b> = a, просто установите одну переменную в фиксированное число, например. c = 10000, затем пусть b пробежит от 0 до c, пока вы не найдете решение, где < b (не пробовал, но должен работать).

4

Предполагая, б, должны быть целыми числами:

Первые факторизовать 2012 во все возможные наборы 3 числа (триплеты). (Вы можете сделать это, сначала разложив на две группы, а затем разложив их дальше, чтобы получить триплеты).

Тогда для каждого триплета (х, у, г) найти решения для:

a + b = x 
b + c = y 
a + c = z 
c >= b 
b >= a 
+0

(просто сидение) 'let g (x, y, z) a = let b = xa; c = z-a in (a, b, c, y-c-b) '->' g (1,503,4) (-249) ==> (-249,250,253,0) '; g (1,2012,1) (-1005) ==> (-1005,1006,1006,0) '; g (2,503,2) (-250) ==> (-250, 252, 252, -1) '; 'g (2,503,2) (-249) ==> (-249,251,251,1)'. –

+0

'y-c-b = y- (z-a) - (x-a) = y-z-x + 2a'. Кроме того, '(a, b, c)' for '(x, y, z)' is '(b, c, a)' for '(y, z, x)'. –

Смежные вопросы