|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
26.10.2012, 16:33 | #1 (permalink) |
Member
Регистрация: 26.10.2012
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Определить минимальное количество первых символов слов
Строка состоит из нескольких слов, разделенных пробелом. Определить минимальное количество первых символов слов, по которым можно различить слова в строке. Входные данные: abc5 abc0 abcde abcfg Выходные данные: 4 |
26.10.2012, 16:33 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Аналогичные проблемы должны вам помочь Один из первых отзывов о "винде" Heretic - один из первых шутеров DOOM Клава , один из моих первых модов По мотивам первых карманных |
26.10.2012, 21:30 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Разрешите доложить: задание выполнено!
Код:
Var S:String; W:Array[1..100] of String; i,j,Nw,Nsymb:Byte; b,b1:boolean; Begin Writeln('Enter the string:'); Readln(S); Nw:=1; i:=0; W[Nw]:=''; Repeat Inc(i); If (S[i]<>' ') and (i<=Length(S)) then W[Nw]:=W[Nw]+S[i] else If S[i]=' ' then begin Inc(Nw); W[Nw]:=''; end; Until i>Length(S); Nsymb:=0; Repeat Inc(Nsymb); b:=true; b1:=false; For i:=1 to Nw do If Length(W[i])<Nsymb then b1:=true; If Not(b1) then For i:=1 to Nw-1 do For j:=i+1 to Nw do If W[i][Nsymb]=W[j][Nsymb] then b:=false; Until b or b1; If b1 then Writeln('No solution!') else Writeln('Minimal number of symbols is ',Nsymb); Readln End. |
27.10.2012, 08:42 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
18.11.2012, 18:04 | #7 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Как Вы, вероятно, поняли, в первой части программы из строки выделяются отдельные слова и записываются в строковый массив W. Также определяется количество слов Nw. Дальше начинаем анализировать полученный массив. Делается это так. Последовательно увеличиваем номер символа Nsymb, начиная с первого, до тех пор, пока не убедимся, что во всех без исключения словах на позиции, соответствующей текущему номеру, стоят различные буквы без единого совпадения. Тогда булевский флажок b сохраняет значение true и текущий номер принимается за ответ. Но! Представьте себе, что строка такая: приз призёр призовой Здесь, пройдя 4 номера, обнаруживаем, что первое слово кончилось! За такую ситуацию отвечает флажок b1, и если подобное произошло, то этот флажок перебрасывается в true и программа рапортует "Решения нет!". |
|
18.11.2012, 18:19 | #8 (permalink) |
Member
Регистрация: 26.10.2012
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Простите, я тут туплю немного (или много), но вот в этой части я вообще не понимаю как идёт подсчет
For i:=1 to Nw do If Length(W[i])<Nsymb then b1:=true; If Not(b1) then For i:=1 to Nw-1 do For j:=i+1 to Nw do If W[i][Nsymb]=W[j][Nsymb] then b:=false; |
18.11.2012, 18:42 | #9 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Дальше немного сложнее. Пусть текущий номер, например, Nsymb=3. Наша задача - сопоставить символы, стоящие на третьей позиции, для всех слов, и только если они все окажутся различными, то 3 будет ответом на задачу. Пусть, для примера, массив содержит 5 слов. Тогда третий символ первого слова сопоставляем с третьими символами второго, третьего, четвертого и пятого, затем третий символ второго слова сопоставляем с третьими символами третьего, четвертого и пятого слов (с первым словом уже не надо), затем третий символ третьего слова - с третьими символами четвертого и пятого, и, наконец, третий символ четвертого с третьим символом пятого. И если обнаружим хоть одно совпадение, то переходим к Nsymb=4, потом к Nsymb=5 и т.д. |
|
18.11.2012, 18:48 | #10 (permalink) |
Member
Регистрация: 26.10.2012
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо=))
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|