Форум программистов, компьютерный форум CyberForum.ru

Составить палиндром - C++

Восстановить пароль Регистрация
 
siniykot
0 / 0 / 0
Регистрация: 19.05.2016
Сообщений: 2
23.05.2016, 07:31     Составить палиндром #1
Дан набор слов, из которых можно составить палиндром(используя все слова). Нужно вывести этот палиндром
Помогите
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2016, 07:31     Составить палиндром
Посмотрите здесь:

C++ Палиндром
C++ Палиндром.
C++ палиндром
Палиндром C++
C++ Палиндром
C++ Палиндром
C++ Палиндром 2 С++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Геомеханик
 Аватар для Геомеханик
517 / 324 / 253
Регистрация: 26.06.2015
Сообщений: 738
23.05.2016, 19:42     Составить палиндром #2
Цитата Сообщение от siniykot Посмотреть сообщение
Помогите
Написал простым перебором, но лучше его не воспринимать всерьёз.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <vector>
#include <string>
 
//грубым перебором составить палиндром из массива-слов
bool is_buildp(std::string& d, std::vector<std::string>& ws){
    std::vector<std::string>::size_type a, b, i, j, m;
 
    if(ws.empty())
        return false;
 
    for(j = m = 1; j != 0;){
 
        for(d = "", i = 0; i < ws.size(); ++i)
            d += ws[i];
        for(a = 0, b = d.length() - 1; a < b; ++a, --b){
            if(d[a] != d[b])
                break;
        }
        if(a >= b)
            return true;
 
        for(a = m, b = 0, j = ws.size(); j > 0; --j){
            i  = a % j;
            a /= j;
            if(i == 0)
                b += 1 - (a & 1);
            else {
                if(a & 1)
                    i = j - i;
                std::swap(ws[b - 1 + i], ws[b + i]);
                break;
            }
        }
        ++m;
    }
    d = "";
    return false;
}
 
int main(void){
    std::vector<std::string> ws;
    ws.push_back("-KAZAK-");
    ws.push_back("ABCDEF");
    ws.push_back("-XY");
    ws.push_back("FEDCBA");
    ws.push_back("YX-");
 
    std::string d;
    if(is_buildp(d, ws))
        std::cout << d << std::endl;
    else
        std::cout << "error build p!" << std::endl;
    return 0;
}
Yandex
Объявления
23.05.2016, 19:42     Составить палиндром
Ответ Создать тему
Опции темы

Текущее время: 19:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru