Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2017, 17:21   #1
kizhvac_kampazitr
 
Аватар для kizhvac_kampazitr
 
Регистрация: 02.04.2017
Сообщений: 4
По умолчанию Восстановление палиндрома

Восстановление палиндрома
Задано слово, состоящее из маленьких латинских букв. Требуется изменить порядок букв так, чтобы получился палиндром. Если возможных палиндромов больше одного, вывести лексикографически минимальный (т.е. тот, который бы в словаре следовал ранее всех). Если невозможно расположить буквы в палиндром, вывести слово impossible.

Можно использовать только библиотеки iostream, string, vector, algorithm:


примеры

1)dblolod dlobold
2)abababcd impossible
3)abababbacadacad aaabbcdadcbbaaa

Вот мой код ,, хочу написать функцию которая делает строку палиндромом но идей никаких , и в подсчетной сортировке ошибку выдает string subscript out of range
Помогите с кодом плиз !
Код:
#include <iostream>
#include <string>
#include <algorithm>

void CountingSort(std::string& s)
{
	std::string buckets;
	for(int i = 0; i < s.size(); ++i)
		++buckets[s[i] - 'a'];
	s.clear();
	for(int i = 0; i < buckets.size(); ++i)
		for(int j = 0; j < buckets[i]; ++j)
			s.push_back(i);
}

void make_palindrome(std::string& s)
{
	
}

int main()
{
	std::string letters;
	std::cin >> letters;
	CountingSort(letters);
	make_palindrome(letters);
	std::cout << letters;
}

Последний раз редактировалось kizhvac_kampazitr; 02.04.2017 в 21:02.
kizhvac_kampazitr вне форума Ответить с цитированием
Старый 03.04.2017, 10:40   #2
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Код:
#include <iostream>
#include <string>
#include <algorithm>

std::string make_palindrom(const std::string& base)
{
    using namespace std;
    constexpr char range = 'z' - 'a' + 1; // Общее количество символов
    size_t char_counts[range] = {}; // заполненный нулями массив, считающий количество символов
    for (char c : base) {
        char_counts[c-'a']++;
    }
    int even_index = -1;
    for (size_t i = 0; i<range; ++i) {
        if (char_counts[i] & 1) // Если у нас количество символов нечётное
        {
            if (even_index<0) {
                even_index = i;
            }
            else {
                // В палиндроме все символы должны иметь чётное количество
                // Кроме того, который посередине
                return "impossible";
            }
        }
    }
    string beg;
    // строим первую половину палиндрома, добавляя по половине символов в result
    for (char i = 0; i<range; ++i) {
        for (size_t j = 0; j<(char_counts[i] >> 1);++j)
        {
            beg += i + 'a';
        }
    }
    string end(beg);
    reverse(end.begin(), end.end());
    string middle;
    if (even_index >= 0) {
        middle += 'a' + (char)even_index;
    }
    return beg
        + middle // если был нечётный элемент, то в середину
        + end; // развёрнутое начало
}

int main()
{
    std::cout << make_palindrom("whatisyourname")<<"\n";
    std::cout << make_palindrom("aabb") << "\n";
    std::cout << make_palindrom("aatbb") << "\n";

}
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 03.04.2017, 22:20   #3
kizhvac_kampazitr
 
Аватар для kizhvac_kampazitr
 
Регистрация: 02.04.2017
Сообщений: 4
По умолчанию

спасибо помог
kizhvac_kampazitr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение палиндрома - C# svveetlana Помощь студентам 1 11.10.2015 16:50
Нахождение палиндрома (TurboPascal) VladKB1 Помощь студентам 8 20.06.2014 17:36
Алгоритм поиска палиндрома Mr. Boogie man Общие вопросы C/C++ 1 07.01.2012 16:36
Определение палиндрома без массивов Negent Общие вопросы C/C++ 7 09.12.2011 17:46
проверка палиндрома ArniLand Общие вопросы C/C++ 4 27.12.2010 14:46