| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Object Pascal: кроссплатформенные технологии > АБРАКАДАБРА |
| Автор: Aleche 9.12.2004, 19:57 |
| Привет,ребята!!!! Есть очень интересная задача! Есть какие-нибудь версии решения? ЗАДАЧА: Последовательность из латинских букв строитсся следующим образом.На первом шаге она пуста.На каждом последующем шаге она удваивается,после чего к ней слева дописывается очередная буква латинского алфавита .Пример построения: Пстая последовательность: ШАГ 1 a ШАГ2 baa ШАГ3 cbaabaa ................... Задача сотоит в том ,чтобы по заданному числу n определить символ ,который стоит на n-ом месте в послндовательности,получившейся после 26 шага!!!!!!!!!!!!!!!!!!!!!!!!!(ПРОСЬБА ОПИСАТЬ ПРОДЕЛАННЫЕ ВАМИ ОПЕРАЦИИ) |
| Автор: Pakshin A. S. 9.12.2004, 20:21 |
| Что-то очень знакомо... Я же писал... не работает что ли... |
| Автор: Akina 9.12.2004, 20:26 |
| Гораздо проще создавать алгоритм, если считать не от начала, а от конца строки... все становится совершенно тривиально... N(i)=2*N(i-1) |
| Автор: Aleche 10.12.2004, 20:41 |
| НЕ РАБОТАЕТ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| Автор: Pakshin A. S. 10.12.2004, 20:43 |
| Я так и думал, если про моё... |
| Автор: Elfin 13.12.2004, 00:16 | ||
а в чем собсна проблема?
|
| Автор: Pakshin A. S. 13.12.2004, 13:12 |
| Ага... они строки не проходили... Добавлено @ 13:13 А 255 символов хватит? Т. к. паскаль... |
| Автор: Pakshin A. S. 13.12.2004, 15:51 | ||
Вот, пример решения (не тестил, не оптимизировал):
|
| Автор: Aleche 18.12.2004, 18:46 |
| Привет!!!!!!!!!!! Жаль, что ты,Pakshin A.S. ,не тестил программу!!!!Решение,наверное, интересное,но что-то длинное. А Я НАКОНЕЦ-ТО ПРИДУМАЛА РЕШЕНИЕ . РАБОТАЕТ!!!!!!!!!!!!!!!!!!!! ВОТ ПРОГРАММА: program symbol; const maxn=26; var a:array[1..maxn]of longint; k,n:longint; begin readln(n); a[1]:=1; for i:=1 to maxn-1 do begin a[i+1]:=1+2*a[i]; writeln(a[i]); end; writeln(a[maxn]); for k:=26 downto1 do{цикл для посл-ти} begin if n=1 then write(chr('a')+k-1);break end else begin if n>a[k-1]+1 then n:=n-1-a[k-1] else n:=n-1; end; end; end. |
| Автор: Pakshin A. S. 18.12.2004, 19:29 | ||||
| Ни фига себе!!! Сама придумала?! Добавлено @ 19:32
Добавлено @ 19:37 Вот... подправил...
Поясни алгоритм... |
| Автор: Aleche 19.12.2004, 17:15 |
| НУ ,ВО-ПЕРВЫХ, ПРИВЕТ ,С УВАЖЕНИЕМ , Пакшин Андрей Сергеевич!!!!!!!!!!!!! ВО-ВТОРЫХ,ПРОГРАММА РАБОТАЕТ И ОШИБОК НЕТ,СТРАННО,КАК ТЫ МОГ НЕ ЗАМЕТИТЬ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Кстати,нехорошо заниматься плагиатством!!!!!!!Ну да ладно,алгоритм следующий: 1) сначала генирирую длину последовательности на каждом шаге; 2)начиная с последнего шага,проверяю является-ли введенный номер пользователем 1,если да,то выведется нужная буква алфавита,если нет,то продолжаю поиск следующим образом:n:=(n-1)moda[k-1]<=>n:=n-1-a[k-1]+1;т.к .,если ты заметил посл-ть симметрична ,исключая n=1. ; |
| Автор: Pakshin A. S. 19.12.2004, 21:10 |
| Ни фига себе! Сама додумалась!!! Поздравляю... зауважал... P. S. Я плагиатством не занимаюсь, а просто подправляю код, выложенный на форуме... |
| Автор: mvdr 3.2.2005, 03:49 | ||
|
| Автор: Pakshin A. S. 3.2.2005, 11:00 |
| Этот код понятный, но они еще не проходили строковый тип, поэтому она не мога его использовать... |
| Автор: Marriage 3.2.2005, 13:22 |
| ОЛимпиада ??? |