Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2011, 16:43   #1
udginfess
Новичок
Джуниор
 
Регистрация: 30.01.2010
Сообщений: 1
Лампочка розсудите в решении

Петя Пяточкин старательно изучал программирование весь год, поэтому Святой Николай принес ему много конфет. Но у Петрика есть много друзей, которые плохо учились, а потому не получили конфет вообще. Не поверите, но этих друзей даже больше, чем конфет! Поскольку наш герой чрезвычайно добрый, то он решил отдать все конфеты друзьям, и не просто отдать, а разделить поровну.
Петя быстро сообразил, что на всех конфет ему не хватит. У парня достаточно странное понимание слова "поровну" - он решил, что нужно выбрать нескольких друзей, и разделить все конфеты между ними так, чтобы у каждого было одинаковое количество (это и есть"поровну" в понимании Пети).
Как это сделать - вот главный вопрос. Проблема не только в том, чтобы выбрать друзей, которые немного меньше других безобразничали в этом году, поэтому должны получить конфеты, проблема еще и в том, чтобы подобрать нужное количество "хороших" друзей.
Если друзей два десятка, а конфет всего четыре, то можно выбрать лишь одного друга, и отдать ему все конфеты. Можно выбрать двух друзей, и отдать им по 2 конфеты. Есть еще и третий способ - выбрать четырех, и каждому дать лишь одну конфету, потому что употреблять много сладостей вредно. Вот горе, трех друзей выбрать не выйдет, потому что как между ними не дели - или лишняя конфета останется, или кто-то получит многовато.
Задание.
Петя любит решать задачки, поэтому он попробовал написать программу, которая по заданному количеству конфет считает, сколько есть N чисел таких, что K конфет можно "поровну" разделить между N друзьями. Попробовать - попробовал. Ничего из этого не вышло. А у Вас - выйдет?
Входные данные. В единственной строке записано натуральное число K - количество конфет, которые еще остались у Пети.
Выходные данные. Единственное целое число – количество вариантов выбора числа "хороших" друзей.
Ограничение. Пете известно, что конфет у него не больше 10^9

я так понял ну не знаю :

Фишка в том что если K конфет можно распределить по N друзьям это значит что K делится нацело на N. Очевидно что это возможно для только для простых множителей числа и их комбинаций. Например для 12 это будет 2*2*3. Соответственно это варианты 1, 2, 3, 4, 6, 12. Получается что для заданного числа конфет K необходимо получить разложение этого числа на простые множители и затем каким-то образом составить из этих множителей все возможные комбинации делителей.

Можно например перебирать все сочетания множителей и проверять, есть-ли уже такое число в неком списке, куда будут добавляться все возможные произведения. Причём сочетания необходимо брать по1, 2,3 и так далее до числа множителей. То есть если число представляется в виде произведения 5 чисел то брать сначала сочетания из 5 элементов по одному. Затем из 5 по 2, затем по 3 из 5 и так до 5 из 5. Это будут наборы всех возможных комбинаций множителей.

Может кто то свои версии подкинет
udginfess вне форума Ответить с цитированием
Старый 17.12.2011, 16:54   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
составить из этих множителей все возможные комбинации делителей.
надо просто найти все делители и все
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нуждаюсь в решении. vladter Паскаль, Turbo Pascal, PascalABC.NET 31 28.06.2011 16:15
Нужна помощ в решении Torres123 Помощь студентам 2 10.02.2011 17:25
помощ в решении Shaitan63 Помощь студентам 19 21.04.2010 10:40
возможно ли решении в Excel? stbo Microsoft Office Excel 7 12.10.2008 19:16
Помогите в решении... bacler Паскаль, Turbo Pascal, PascalABC.NET 4 29.02.2008 23:23