Вот несколько советов о том, почему вы получаете неправильное число:
Правильный способ определения всех возможностей
Попробуйте разделить 5 вместо 500 для простоты. Обратите внимание, что существует 4 варианта: 5 =
- 5
- 2 + 2 + 1
- 2 + 1 + 1 + 1
- 1 + 1 + 1 + 1 + 1
Теперь попробуйте разделить 10 вместо 500. Обратите внимание, что это можно разделить на 11 различных способов: 10 =
- 10
- 5 + 5
- 5 + 2 + 2 + 1
- 5 + 2 + 1 + 1 + 1
- 5 + 1 + 1 + 1+ 1 + 1
- 2 + 2 + 2 + 2 + 2
- 2 + 2 + 2 + 2 + 1 + 1
- 2 + 2 + 2 + 1 +1 + 1 + 1
- 2 + 2 + 1 + 1 + 1 + 1 + 1 + 1
- 2 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
- 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
Это решение следует следующей схеме: число x, которое вы хотите разделить, уже являетсяответ. Уменьшите количество младших чисел на 1, разделив одно из этих чисел на максимально возможное число следующих чисел. Всегда игнорируйте их. Если осталось только одно число (и единицы), разделите x на максимально возможное число следующих наименьших чисел и продолжайте.
Например, x = 10. Затем: 10 - наименьшее число -> разделите егона 5 + 5 -> 5 - это наименьшее число -> разделить его на 2 + 2 + 1 -> 2 - наименьшее число, так как единицы игнорируются -> разделить его на 1 + 1 -> у нас есть еще 2, разделитьэто до 1 + 1 (это равно решению 5 + 1 + 1 + 1 + 1, так что теперь у нас есть 5 как только одно число, кроме единиц. Следующее наименьшее число равно 2) -> разделить x = 10 на 2 +2 + 2 + 2 + 2 -> 2 - наименьшее число;разделите его на 1 + 1 -> у нас есть еще 2 ...
Это можно сделать рекурсивным подходом.
Что не так в вашем коде
То, что вы делаете с примером деления 10, выглядит следующим образом:
- 10 делится на 5 + 5
- , первые 5 делятся на 2 + 2 + 1
- одна из этих двойок делится на 1 + 1
- , остальные две делятся на 1 + 1
- Теперь вторые 5 из деления на 5 + 5 делятсяна 2 + 2 + 1
- Одна из этих двойок делится на 1 + 1
- Две другие делятся на 1 + 1
Предоставление всегооценка 7 возможностей. Пытаясь сопоставить эти 7 возможностей с 11 приведенными выше, вы считаете 10 =
- 10 один раз
- 5 + 5 один раз
- 5 + 2 + 2 + 1 дважды
- 5 + 2 + 1 + 1 + 1 дважды
- 5 + 1 + 1 + 1 + 1 + 1 дважды
и пропущены остальные 6 опций.
Таким образом, предположение, что этот вопрос может быть решен с помощью такого подхода, как этот:
10 = 5 + 5 -> оцените первые 5, затем оцените вторые 5
неверно, потому что в обоих случаях это приводит к распределению 10 = 5 + оценка 5, считая только те варианты, в которых хотя бы один 5 содержится в окончательном распределении 10 (считая его многократно, без распределения пятерок). не оцениваются).
Другая ошибка заключается в том, что в коде сказано, что нет возможного распределения 1, если оно действительно существует (1 = 1). Кроме того, неясен вопрос о том,
- может ли х равняться всем возможным целым числам? -> 4 не делится на 2 + 2 в вашем коде
- - это 1 + 1 + 2, отличное от 1 + 2 + 1 и 2 + 1 + 1?
(У меня пока нет репутации спрашивать об этом в комментарии).
Оставить рекурсивный подход можно только с некоторыми существенными изменениями. Возможный способ сделать это указан выше.