2015-04-04 2 views
0

Во время практики проблемы кодирования, я столкнулся с этой сложной проблемой:Challenging Алгоритмические Модульный Множественные

что у меня есть 7-переменное уравнение (А + В + С + С + D + B), (E + F + B + C) (G + F + F) и огромный список, содержащий до 3500 номеров:

A 1, 2, 3; B 1, 2; C 9, 1; D 1; E 2; F 1; G 1

Этот список в основном дает все возможные значения, которые могут иметь каждая переменная. Вопрос в том, сколько способов я могу выбрать значения переменных, чтобы получившееся число было кратным семи?

Например, я мог бы выбрать из приведенного выше списка A = 1, B = 1, C = 1, D = 1, E = 2, F = 1, G = 1. Это сделало бы число (1 + 2 + 1 + 1 + 1 + 1) (2 + 1 + 1 + 1) (1 + 1 + 1) = 35, что действительно кратно семи.

Моим решением было проверить каждую возможную комбинацию из семи переменных и проверить, была ли эта сумма кратной семи. Однако это решение, очевидно, очень медленное. У кого-нибудь есть более эффективное решение этой проблемы?

+0

Кто-нибудь? до сих пор единственный ответ дается слишком медленно. –

ответ

0

а если первое число кратное 7, чем что бы вы ни раз его по ней хорошо оставаться кратна 7

так (E + F + B + C) (G + F + F) совершенно не имеет значения.

if (E + F + B + C) является кратным 7, тогда сумма также кратная 7 с G (G + F + F).

Если ни один из них не кратен 7, я не думаю, что ответ может быть кратным 7. По крайней мере, я не могу придумать случай, когда это может произойти. ex, не может быть 10 единиц, когда-либо будет на 7, кроме 7 или 14 10s

+0

Спасибо! Но как я мог бы подсчитать общее количество возможных ответов? Не могли бы вы немного объяснить псевдокод или что-то еще? Большое спасибо –

+0

Как бы это реализовать эффективно? Единственный способ, о котором я могу думать, - это повторить все, что в принципе совпадает с моим решением. Это слишком медленно. Спасибо за помощь, хотя! –

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