Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Интересная задачка

Сообщения:  [1-10]    [11-20]   [21-30]  [31-35] 

 
 автор: Akira   (12.05.2005 в 18:00)   письмо автору
 
   для: Flash5   (12.05.2005 в 17:04)
 

Изначально дано некоторое кол-во чисел n =) Оно может принемать любое кол-во.

   
 
 автор: Akira   (12.05.2005 в 18:00)   письмо автору
 
   для: Flash5   (12.05.2005 в 17:04)
 

Изначально дано некоторое кол-во чисел n =) Оно может принемать любое кол-во.

   
 
 автор: Flash5   (12.05.2005 в 17:04)   письмо автору
 
   для: Akira   (12.05.2005 в 11:20)
 

Да не проверять количество не надо, так как у вас исходно есть что из неких 5 цифр можно собрать сумму например 10, а вам нужны все 7 значение числа, тогда вы добавляете еще два 0 и генерите все возможные варианты! Это очень быстрый вариант, быстрей как мы подумали сделать не будет возможно!

   
 
 автор: Akira   (12.05.2005 в 11:20)   письмо автору
 
   для: Flash5   (12.05.2005 в 10:31)
 

А потом после этого проверка кол-ва цифр =))) Еще занемает время.

   
 
 автор: Flash5   (12.05.2005 в 10:31)   письмо автору
 
   для: Akira   (12.05.2005 в 00:46)
 

Мой математик, член моей команды, в свое время нашел формулу по которой он получал все возможные цифры сума которых и была равна искомой. Мы получали что то в этом роде
Sum=10
9,1
8,1,1
8,2,
7,1,1,1
7,2,1
7,3
и т.д.
Потом же из каждых можно очень быстро сгенерировать все возможные числа как например из 9,1 можно получить 91 или 19 если N=3 то можно еще нулики подставлять. Дело в том что мы не можем вспомнить как мы получали эти цифры (комбинацию)

   
 
 автор: Akira   (12.05.2005 в 00:46)   письмо автору
 
   для: Flash5   (11.05.2005 в 23:10)
 

Маленькую сумму я оградил здравым смыслом =)
Сумму меньше 9 подсчитать легко. Просто делим не на 9, а на 8, 7, 6 и т.д.

Время выполнения я снизил максимально (при условии перебора).
Так же не стал выводить все возможные билеты с правильным суммарными слогаемыми, опять же из-за здравого смысла, нагрузка на сервер велика =/
Эту задачу надо писать не на php, но к моему великому сожелению других языков не знаю.
Кстати математически эту задачу не решить. Пробывал обмозговать с преподом математики =)))
Я все думаю, как написть листинг без использования перебора.
Есть у меня мысль =)
Пример: 923 - это в сумме 14.
Если из последнего слогаемого вычесть 1 и прибавить ее ко второму появиться
931. Этот ответ занести в массив.
Теперб делаем то же самое до достяжения 0. И все ответы в массив (при условии что такого числа нет в массиве, хотя дубликаты потом можно удалить)
Так проходим все слогаемые.
Не знаю будет ли это быстрее, пробывать не пытался.
PS Очень удивлен, что cheops не предложил своего варианта.

   
 
 автор: Flash5   (11.05.2005 в 23:10)   письмо автору
 
   для: Akira   (11.05.2005 в 19:11)
 

Не вижу резона делать ограничение на сумму! Или это было указано в условии задачи? Кстати есть на уме еще быстрее алгоритм, по моим подсчетам он должен справится с N=20 как минимум! Но вот облом его писать! Ращение на математическом уровне :-)
Замечу что если нужно получить только количество то это облегчает задачу!
Кстати предложенный вами вариант довольно быстрый, кто-то проверял на ошибки?
П.С. Хочу уточнить что мой вариант ращения получает только половину билета, я посчитал что как получить все возможные варианты из половинок это все знают, два цикла вставленные в друг друга!

   
 
 автор: Akira   (11.05.2005 в 19:11)   письмо автору
 
   для: кен   (11.05.2005 в 11:04)
 

Сумма слишком мала =) я специально не разрешил использовать маленькие суммы =) И по условию кол-во цифр в билете ВСЕГДА четно

   
 
 автор: кен   (11.05.2005 в 11:28)
 
   для: Flash5   (10.05.2005 в 10:11)
 

Сейчас достал из куртки билетики от вчерашних поездок на автобусе. Цитирую номера:
023531
044890
0003520
Как видите, с нулей начинаются только в путь! И, кстати, могут нечётное к-во цифр иметь!

   
 
 автор: кен   (11.05.2005 в 11:04)
 
   для: Akira   (11.05.2005 в 00:12)
 

А почему "Данные не верны", когда, например, Cумма = 3 и Кол-во = 3? Или билетик "111 111" недостаточно счастливый? :))

Попробуй Кол-во = 5 и Сумма = от 10 до 18. Все числа результата начинаются с нуля. А где остальные?

   

Сообщения:  [1-10]    [11-20]   [21-30]  [31-35] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования