Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

палиндромы(с++)

19K
04 марта 2008 года
Paradoxek
45 / / 24.10.2007
спроектируйте программу,позволяющую установить, является ли входная последовательность символов обычным палиндромом(одинаково читается в обоих направлениях) или упакованным палиндромом(одинаково читается в обоих направлениях при удалении пробелов). либо не принадлежит ни к одному из указанных типов последовательностей.
примеры:
"ТОПОТ" обычный палиндром
"А роза упала на лапу Азора" упакованный
"у лип Лёша нашёл пилу" упакованный
3
04 марта 2008 года
Green
4.8K / / 20.01.2000
В чем сложность?
Идешь по слову до середины справа на лево и слева на право и сравниваешь буквы. Если буквы одинаковые - слово является палиндромом, иначе - убираешь пробелы и опять повторяешь сравнение, т.о. получаешь является ли строка упакованным палиндромом.

Другой алгоритм:
Разделяешь строку на две равные половины, одну из половин реверсируешь и сравниваешь с другой. Если не совпали - строка не полиндром, убираешь из исходной строки пробелы и повторяешь.
19K
04 марта 2008 года
Paradoxek
45 / / 24.10.2007
ну да, сам алгоритм понятен, нужно составить что то вроде блоксхемы, всё подробно описать, когда какой массив создавать, что после чего делать.. чем подробнее тем лучше
6.8K
05 марта 2008 года
bolt90
80 / / 25.01.2007
я так подумал, если указан язык, то код надо, и по ниму можно и алгоритм написать

Код:
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>

void pack (char *mas, int save) {
char *pas=(char*) malloc(sizeof(char)*save);
int k=0,j=0; // к-количество пробелов, джи-итератор нового массива
//безпробельной строки
for (int i = 0; i < save; i++) {
 if (mas!=' ') {pas[j]=mas; }
 else {k++; continue;}  j++;
}

for (int i = 0; i< save - k; i++) {
     if (pas!=pas[save-k-1-i]) { //если несовпадает то не палиндром
     cout << "ne";  getch(); exit(0); }
}
cout << "packed";
getch();
exit(0);
}

void main()
{
char mas[100]; int save=0; //в сейве общее количество символов
cin.getline(mas,99); //все записуем в массив
for (int i = 0; i < 100; i++)
if (mas=='\0') { //ищем конец
 save=i; break;
}

for (int i = 0; i < save; i++) {
     if (mas!=mas[save-1-i] || mas==' ') //если несовпадения или //пробел
     pack(mas,save); //функция проверки упакованого
}
cout << "normal";
getch();
}

пробуй минимизировать
3
05 марта 2008 года
Green
4.8K / / 20.01.2000
Цитата: bolt90
я так подумал, если указан язык, то код надо, и по ниму можно и алгоритм написать
<code skip>


Ужас! Отвратительный код.
Совет: научись использовать C++.

Цитата: bolt90
пробуй минимизировать


легко:

Код:
bool isPalindrome(const string& str)
{
    return equal(str.begin(), str.begin()+str.size()/2, str.rbegin());
}

bool isPackPalindrome(const string& str)
{
    string s;
    remove_copy_if(str.begin(), str.end(), insert_iterator<string>(s, s.begin()), isspace);
    return isPalindrome(s);
}

int main()
{
    cout << "Input a string: ";

    string str;
    getline(cin, str);

    cout << "This is "
        << (isPalindrome(str) ? "a" : isPackPalindrome(str) ? "a packed" : "not")
        << " palindrome" << endl;

    return 0;
}
19K
11 марта 2008 года
Paradoxek
45 / / 24.10.2007
код не работает((
320
11 марта 2008 года
m_Valery
1.0K / / 08.01.2007
Цитата: Paradoxek
код не работает((


Все работает. Ошибки в студию. #include <string>
#include <algorithm> есть ? Ты ж смотри что тебе дают,а не срисовывай
код.:)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог