Алгоритм: 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, если рассматриваем худший случай.)
Ну а указание на то, что сравнивать флаг нужно после каждого цикла - рационально! Молодец!
На сколько я помню - нумерация элементов строки начинается с 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 сравнений. Суть алгоритма в том, чтобы в цикле сравнить первую букву с последней, вторую с предпоследней и т. д. аж до центра слова. Если слово с нечётным кол-вом букв, то центральную ни с чем сравнивать не нужно.
Так а точ, что 1+i и N-i тебя не смутило? 0 нужен для того, чтобы перед циклом не задавать начальные и конечные элементы сравнения.
Моя вина)
Quote (aufgeklärt)
Здесь D - половина от длины всего слова, а не длина новой сравниваемой строки.
Да, всё понял:) Твоя алгоритм пожалуй лучше:) Ну если его юзать, то я не думаю, что мой слишком замедлит процесс вычисления)) Ну это если не работать с миллиардами слов одновременно) Нужна помощь? Сюда: vkontakte.ru/berestovskiy