|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.02.2008, 15:27 | #1 |
Life:[### ]22%
Пользователь
Регистрация: 15.12.2007
Сообщений: 48
|
Множество
Здравствуйте. Если можете, помогите придумать алгоритм заполнения множества. Суть такая: нужно в файл записать множество содержащее 500 элементов при том, что если в числе содержится цифра из предыдущего числа, то оно не пишется, записывается только если в предыдущем числе нет цифр из числа последующего, т.е.
0-1-2-3-4-5-6-7-8-9-10-22-30-41-50-61-70-81-90-111-200-... и тд. Я думал над прибовлением по единици, сравнении с предыдущем и занесении в массив состоящий из 500 элементов, но мне не придумать условие сравнения. Написать надо в Delphi 7 Если кто может помочь, буду очень признателен.
My Life v1.0b ERROR: health.dll not found
|
23.02.2008, 16:12 | #2 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Код:
|
23.02.2008, 16:41 | #3 |
Life:[### ]22%
Пользователь
Регистрация: 15.12.2007
Сообщений: 48
|
Большое спасибо!
My Life v1.0b ERROR: health.dll not found
|
23.02.2008, 18:18 | #4 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
to xxxPascalxxx
А вы уверены, что вам нужно 500 членов множества и что предложенный вам алгоритм будет работать? По крайней мере у меня 60 - ый член множества, который равен 9111111, вычислялся почти две минуты. |
23.02.2008, 20:16 | #5 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
м..да
я то-же попробовал. Очень медленно. И похоже диапазон integer исчерпается раньше 500-го элемента. Но есть и хорошая новость. Наблюдается устойчивая закономерность: 200 311 400 511 600 711 800 911 2000 3111 4000 5111 можно отталкиваться от этого. |
23.02.2008, 20:28 | #6 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Собственно вот код в консоли Делфи. Но до 500 я так и не добрался, даже не знаю чем кончится.
Код:
|
23.02.2008, 20:53 | #7 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
уже просто из любопытства.
200 - 21-й элемент каждые 8 элементов добавляется новый разряд. значит 500-й элемент будет ~ 60 разрядов. Т.е. прямым перебором с проверкой условия расчет никогда не закончится. |
24.02.2008, 02:35 | #8 |
Участник клуба
Регистрация: 26.10.2007
Сообщений: 1,244
|
Как правильно заметили, появляется закономерность...
Начинается она с числа 200 ( 21 элемент ).. Сообственно эту закономерность и используем.. Код:
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым, Попытка глубже понимать уже попахивает литром... |
24.02.2008, 09:50 | #9 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Идея со строками хорошая, только алгоритм надо подправить, а то 28-й элемент = 911, а у вас он выпадает. Вместо него 2111, хотя 29 = 2000.
|
24.02.2008, 10:37 | #10 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Вот так всегда, только более-менее интересная задачка, так сразу Дельфи.
В общем, алгоритм простой и суть его не в том, чтобы складывать числа, а в том, чтобы складывать цифры, а вовсе не искать закономерности, которых, строго говоря, нет. Одним словом, если кому интересно, могу предложить реализацию на ЦПП c несколько упрощенной и не ахти какой оптимальной арифметикой больших чисел. 500 элементов данный алгоритм получает за 1-2 секунды, несколько дольше ~1700 элементов, после чего разрядность чисел превышает 256. перебор выглядит вот так: Код:
Код:
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Delphi. Множество Мандельброта и Жюлиа | KEnt | Помощь студентам | 8 | 07.12.2011 23:54 |
Как задать множество | 1234 | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 25.05.2008 16:15 |
Множество браузеров | LeoN | Общие вопросы Delphi | 0 | 01.05.2008 14:55 |
Что такое множество? | ZhekON | Помощь студентам | 3 | 07.04.2008 20:22 |