В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||||||||||||
1 | ||||||||||||||||
Палиндром-ли вся строка23.03.2011, 01:21. Показов 6648. Ответов 21
Метки нет (Все метки)
Был сегодня на собеседовании, одно из заданий было определить является-ли строка палиндромом.
Пример строки был задан такой: а роза упала на лапу азора. Пробелы могут быть несемметричны. Входная строка не должна меняться. Я написал там на листочке нечто вроде.
Подумав сейчас решил написать некий такой вариант. Впринципе определяет по идее, но не уверен в правильности.
0
|
23.03.2011, 01:21 | |
Ответы с готовыми решениями:
21
Строка: Определить, является ли строка симметричной, а может она - палиндром... Строка палиндром Строка-палиндром Строка палиндром |
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
|
||||||
23.03.2011, 01:41 | 2 | |||||
Вообще говоря, странно, но всё же сам как-то пробовал посмотреть, в какой же ассемблерный листинг это дело выливается в плюсах(компиль от msvc) и вышло нечто вроде
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
23.03.2011, 01:44 [ТС] | 3 |
Ma3a, Да, я на MSVS запускал тоже 14.
Но так как тут нету точки следования, то по идее такое выражение не является корректным ибо два или более раз изменяется одна и та же переменная.
0
|
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
|
|
23.03.2011, 02:08 | 4 |
За определенный результат исполнения этого, конечно, ручаться нельзя, но всё-таки с этой данностью придется смириться и называть число, получающееся на большем количестве компиляторов Не проверял, но наверняка в иных языках, особенно крутящихся на виртуальных машинах со стековым исполнением, результат будет скорее 13, так как там просто по структуре кода придется сначала вычислять каждый из операндов и своевременно класть в стек значения операций, так что сначала первый i будет 6, а второй i отдаст 7. Впрочем, это лишь догадки.
1
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
23.03.2011, 09:46 | 5 |
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||||||||||||||||
23.03.2011, 11:41 | 6 | |||||||||||||||
Веселее, когда
0
|
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
|
|
23.03.2011, 11:54 | 7 |
а что в нем не корректного ?
i=++i + ++i; 1) ++i 2) ++i 3) i + i приоритет операторов задан стандартом
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||||||
23.03.2011, 12:06 | 8 | |||||
Ответ будет 19.
0
|
49 / 49 / 13
Регистрация: 21.04.2009
Сообщений: 265
|
||||||
23.03.2011, 12:17 | 9 | |||||
у меня wxDev-C++
0
|
291 / 151 / 34
Регистрация: 13.10.2009
Сообщений: 164
|
|
23.03.2011, 12:19 | 10 |
У меня VS 2010
Показывает 17, не пойму откуда 17 =) ... Вообще странно - в консольном варианте 19, а в winform 17
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
23.03.2011, 12:20 | 11 |
В целях оптимизации, компилятор предпочёл считать с ошибками.) Векторные вычисления такие векторные.)
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
23.03.2011, 12:57 [ТС] | 12 | |||||
CyBOSSeR, Написал, что UB и будет предположительно 13...
Второй пример был
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
23.03.2011, 13:29 | 13 |
Переменная i модифицируется дважды не переходя через точку следования, что по стандарту есть UB.
Ничего странного, ибо результат операции не определен с точки зрения стандарта. Хотя насчет C++/CLI не в курсе, есть ли стандарт и что в нем оговорено.
0
|
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
|
|
23.03.2011, 17:55 | 14 |
А всё то же самое оговорено, там ссылаются на стандарт C++, на самом деле.Посмотрел в стандарте ECMA 372, относящемся к спецификации языка C++/CLI, так вот в случае операций инкремента/декремента над свойствами и индексаторами есть кое-какие модификации, но оно и понятно, что get,set, все дела, а во всех остальных случаях идет просто отсылка к стандарту обычного C++.
1
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
23.03.2011, 23:56 | 15 |
Достаточно было использовать std::remove_copy_if и std::equal(если говорить об алгоритмах).
При наличии нескольких подряд идущих пробелов это работать не будет. И условие конечное у тебя не совсем правильное... Сравнение должно продолжаться до тех пор пока i < j.
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
24.03.2011, 00:00 [ТС] | 16 |
rangerx, Ну да. Но пробелы для этого несколько мешают насколько я понимаю.
А про std::equal да согласен. Спасибо)
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
24.03.2011, 12:04 | 17 |
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
24.03.2011, 13:34 [ТС] | 18 | |||||
rangerx, Пока делать нечего решил попробовать написать снова.
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
||||||
24.03.2011, 15:38 | 19 | |||||
Да, но я написал бы как-то так(без всяких continue)
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
24.03.2011, 21:21 [ТС] | 20 |
Сегодня был на собеседовании - больше понравилось. Были 3 задачки по почте - сделал. Около 10-15 кодов на самом собеседовании (нужно было исправить или дописать). И тест brainbench - 4.5 балла вышло) Приняли)
1
|
24.03.2011, 21:21 | |
24.03.2011, 21:21 | |
Помогаю со студенческими работами здесь
20
Как зделать чтобы входная строка, если она не палиндром, делалась палиндромом, т.е. к строке добавлялись недостающие символы? Вся строка из DBGrid DrawString: печатается не вся строка Строка-палиндром. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |