|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.10.2008, 08:48 | #11 |
Ну и что? :)
Форумчанин
Регистрация: 20.10.2008
Сообщений: 129
|
вот соптимизировал, вроде все отлично работает. при 1000 где то 5 сек считает.
Код:
нам необходимо найти целые {x, y, z} удовл. условию x*x + y*y + z*z = r*r. т.к. в условии не говорится о равенстве вещественных числе (т.е. когда одно вещественное число равно другому), то соответственно надо перебирать множество целых, как сделал puporev. но при граничных условиях программа должна будет пройти слишком большой чикл, который естественно вылезет за пределы по времени. я предлогаю следующую оптимизацию: берем числа [1..r-1], т.е. будем считать что первое целое число x мы нашли. затем ищем второе целое, меньшее чем sqrt(r*r-x*x) т.е которое сможет войти в уравнение x*x + y*y + z*z = r*r, при известных x и r. после в 3 ем цикле ищем последнее целое, меньшее чем sqrt(r*r-x*x-y*y). если наши числа удовлетворяют условию то нам необходимо найти симметричные им. если нет нулевых значений то количество симметричных будет равно 8, если же 1 из них нулевая то 4, ну и если содержится 2 нулевых то 2 симметричных точки, хотя последнее условие никогда не выполнится в силу первого цикла, но пусть будет оптимизация: если 5 сек много то сузить диапозон поиска, и учесть это в месте наращивания k. спасибо за внимание. вопросы?
Учиться, учиться и еще раз учиться
Последний раз редактировалось Ламер_001; 24.10.2008 в 09:34. |
24.10.2008, 09:17 | #12 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Вообще-то решаем в Паскале, где Ваша программа при r=190 уже вылетает с ошибкой 207, а при замене integer на Longint, считает даже значительно дольше, чем у меня.
|
24.10.2008, 09:32 | #13 |
Ну и что? :)
Форумчанин
Регистрация: 20.10.2008
Сообщений: 129
|
1) она никак не может работать дольше т.к. Ваша перебирает ВСЕ значения, в то время как у меня те которые не выходят за пределы.
2) ничего она не вылетает а выдает 630, столько же сколько и ваша (только если во все циклы идут от -R до R) 3) что бы перевести ее в паскаль уберите {$APPTYPE CONSOLE}
Учиться, учиться и еще раз учиться
|
24.10.2008, 10:13 | #14 | |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Цитата:
|
|
24.10.2008, 11:29 | #15 |
Ну и что? :)
Форумчанин
Регистрация: 20.10.2008
Сообщений: 129
|
не знали - теперь будете знать.
у меня нет паскаля только дельфя 7. предъявите пожалуйста картинку или пусть нас кто нибудь рассудит З.Ы. кстати на олимпиадах почти везде стоит компилятор дельфийский для паскалевских решений
Учиться, учиться и еще раз учиться
|
24.10.2008, 12:54 | #16 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Сразу предупрежу: это Delphi
Код:
|
24.10.2008, 13:27 | #17 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Вот это класс! Для R=1000 в Турбо Паскаль 7.0 считает доли секуды.
Весь массив примерно 35 секунд. P.S. При типе integer выбрасывает, заменил на Longint, стало 35 секунд. Потом дошло сделать Word, стало тоже пару секунд, не измерял. Последний раз редактировалось puporev; 24.10.2008 в 13:37. |
24.10.2008, 16:17 | #19 | |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Цитата:
Но в задании и нет прогонять весь массив. |
|
24.10.2008, 18:00 | #20 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Вот этот вариант в BP считает 4-5 сек.:
Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите решить задачку. | [Pr1_Zr4k] | Помощь студентам | 4 | 10.10.2009 17:52 |
Помогите решить задачку:-(( | torrik | Помощь студентам | 32 | 10.10.2008 09:56 |
Помогите решить задачку:-( | torrik | Microsoft Office Excel | 11 | 07.10.2008 13:38 |