k12th
@k12th
console.log(`You're pulling my leg, right?`);

Как расставить шесть чисел так, чтобы сумма первых трех была примерно равна сумме остальных?

Стоит задача красиво нарисовать кольцевую диаграмму. Диаграмма всегда состоит из шести секторов; справа и слева — по тре легенды с указателями. Соответственно, чтобы это все было более-менее симметрично, надо скормить библиотеке, отвечающей за рендер диаграммы, данные в правильном порядке. То есть, чтобы (a0 + a1 + a2) - (a3 + a4 + a5) было минимальным из всех возможных.

Можно было бы просто перебрать все возможные перестановки массива из шести элементов, но это, ЕМНИП, 6! == 720 перестановок, а дело происходит в браузере, в JS, и в таком месте, где тормоза никак не допустимы.

Сумма чисел будет равна, очевидно, 100 (ибо 100%).
  • Вопрос задан
  • 3443 просмотра
Решения вопроса 2
@vans239
Что-то вы преувеличили количество необходимых перестановок. Выбор левой тройки однозначно определяет выбор правой тройки (а также ее сумму). Поэтому всего необходимо перебрать 6!/(3!*3!) = 20. А это уже мало
Ответ написан
Bringoff
@Bringoff
Android dev at Freelance
Частное от задачи о двух кучах камней - распространенной на олимпиадах как представитель динамического программирования. Неплохо расписано здесь, но вряд ли шкурка стоит вычинки. Проще раскидать приблизительно - кидаем самый большой кусок на одну кучу. Если меньше 50%, докидываем самых маленьких. На этапе, когда станет больше 50% возвращаемся на шаг назад. Либо не возврашаемся, если не намного больше. Остальное уходит во вторую "кучу"
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Отсортировать и взять в первую выборку четные элементы, а во вторую - нечетные. Не факт, что это даст лучший результат, но просто, быстро и первое, что приходит на ум.

Результат будет ближе к нужному, если в каждый набор брать по очереди сначала четный элемент, потом нечетный. Допустим, есть отсортированный набор: 1,2,3,4,5,6.

Берем: (1, 4, 5), (2,3,6). Это уже лучше, чем (1, 3, 5), (2, 4, 6). Так как мы не берем каждый раз в набор с четными элементами заведомо больший элемент, а чередуем.

Если числа в сумме дают что-то определенное (100 или 1, например), то можно попробовать реализовать направленный поиск набора, наиболее близкого к половине от суммы.
Ответ написан
Mrrl
@Mrrl
Заводчик кардиганов
Отсортировать в порядке убывания, потом первые два элемента положить в разные кучки, а каждый следующий - в ту из кучек, где сумма на данный момент меньше. Работать будет не всегда (например, 25,25,20,20,9,1), зато не требует перебора.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы