Определить является ли заданное слово перевертышем.
|
|
Помогите составить программу:Определить является ли заданное слово перевертышем. Для меня это задача "со звёздочкой". Напишите хотя бы намёк кода.
|
|
|
код на Паскале подойдёт?
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
Алгоритм: 1. проверить слово на чётное и нечётное кол-во букв. 2.1 Если чётное и длина N, то D:=N\2; 2.2 Если нечётное, то D:=(N-1)\2; 3. Сравниваем в цикле по i=0..D буквы с номерами 1+i и N-i. 4. Внутри цикла 3 нужно учесть флаг (если буквы не равны при сравнении , то флаг:=1). 5. После цикла проверяем условие : если флаг=1, то не перевёртыш. Иначе - перевёртыш.
Закодируй алгоритм на Си и будет тебе счастье! )))
|
|
|
А не легче: 1)считать строку; 2)второй строке присвоить её наоборот; 3)через фор ту ду проверять соответствие букв и переприсваиаивать булевой переменной тру если одинаковые и если не одинаковые, то выйти с цикла и после цикла написать значение булевой переменной?)
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
нет, не проще. Во-первых, флаг можно сделать и булевой переменной- это ДА! Но цикл i=0..D будет в любом случае минимум в два раза короче, чем само слово+ не нужно вводить дополнительную переменную под обратное слово. Теперь считаем циклы в твоём варианте: 1 цикл Quote (Berestovskiy) присвоить её наоборот 2 цикл Quote (Berestovskiy) фор ту ду (причём двойной длинны относительно D, если рассматриваем худший случай.)
Ну а указание на то, что сравнивать флаг нужно после каждого цикла - рационально! Молодец!
|
|
|
Quote (aufgeklärt) Но цикл i=0..D На сколько я помню - нумерация элементов строки начинается с 1 :Р Quote (aufgeklärt) двойной длинны зачем двойной длинны?) : for i:=1 to length(d) do if s[i]=d[i] then l:=true else begin l:=false;break; writeln(l); end.
Как-то так)
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
Quote (Berestovskiy) На сколько я помню - нумерация элементов строки начинается с 1 :Р Так а точ, что 1+i и N-i тебя не смутило? 0 нужен для того, чтобы перед циклом не задавать начальные и конечные элементы сравнения.
Quote (aufgeklärt) 2.1 Если чётное и длина N, то D:=N\2; 2.2 Если нечётное, то D:=(N-1)\2;
Здесь D - половина от длины всего слова, а не длина новой сравниваемой строки.
По твоему алгоритму в худшем случае(если слово-перевёртыш) пройдёт length(s) сравнений. А по предлагаемому алгоритму в этом же случае пройдёт всего length(s)\2 сравнений. Суть алгоритма в том, чтобы в цикле сравнить первую букву с последней, вторую с предпоследней и т. д. аж до центра слова. Если слово с нечётным кол-вом букв, то центральную ни с чем сравнивать не нужно.
|
|
|
Quote (aufgeklärt) Так а точ, что 1+i и N-i тебя не смутило? 0 нужен для того, чтобы перед циклом не задавать начальные и конечные элементы сравнения.
Моя вина)
Quote (aufgeklärt) Здесь D - половина от длины всего слова, а не длина новой сравниваемой строки.
Да, всё понял:) Твоя алгоритм пожалуй лучше:) Ну если его юзать, то я не думаю, что мой слишком замедлит процесс вычисления)) Ну это если не работать с миллиардами слов одновременно)
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
Quote (Berestovskiy) Ну если его юзать, то я не думаю, что мой слишком замедлит процесс вычисления)) Думаю да.
|
|
|