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

Либо удваивая одиночные, либо заменяя сдвоенные одним символом, привести строку к заданному виду - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ С чего лучше начать, и какие классы создать. Разработка приложения для управления удаленной консолью http://www.cyberforum.ru/cpp-beginners/thread1830586.html
Есть задание: Разработать Клиент-Серверное приложение, которое позволяет выполнять консольные команды на удаленном компьютере без использования стандартных средств удаленной коммункикации (Telnet). Особенности: 1)Приложение может выступать как сервером так и клиентом. 2)Должна присутствовать возможность шифрования канала связи. 3)Должен быть контроль доступа по имени пользователя и...
C++ Даны три целых числа. Вычесть из суммы всех чисел сумму четных чисел Даны три целых числа. Вычесть из суммы всех чисел сумму четных чисел. Помогите решить задачу, с объяснением(изучаю данный язык неделю, попрошу объяснить языком попроще=) http://www.cyberforum.ru/cpp-beginners/thread1830584.html
Вывести ответ с заданной точностью C++
Привет! Зачастил я тут ;( В общем, не могли бы помочь? Требуется сделать вывод ответа с точностью до 10^(-9), например: Output: 4.0 Output: 1.5
C++ Определение размера типа переданного в шаблон
Доброй день. Подскажите почему, sizeof в данном случае некорректно определяет размер структуры struct Preheader_1 { uint8_t packet_length; }; const Preheader_1* preheader_1 = (const Preheader_1*)Data; offset_by_preheader(Data, preheader_1);
C++ Поиск подстроки в строке http://www.cyberforum.ru/cpp-beginners/thread1830523.html
добрый день, товарищи возникло небольшое задание найти все слова, состоящие из одной буквы, в большом тексте я сделал сейчас вот что: заменил все знаки препинания в исходной стоке на пробелы, а после ищу совпадения, скажем, на строку " в ", используя при этом алгоритм кнута-морриса-пратта(по заданию ЛР именно его нужно использовать) скопировал из методички: int KMPSearch(char *string,...
C++ Удалить последние слова из строки Всем добрый день! Перечитал про множество функций для работы со строками. Нашел что то похожее для своей задачи puts(&str); где &str указывается с какого символа обрезать, но ..... она режет с начала строки, а мне нужно обрезать с конца строки. Спасибо за помощь:) подробнее

Показать сообщение отдельно
Invader0x7F
Helper C/C++
 Аватар для Invader0x7F
264 / 141 / 56
Регистрация: 22.09.2016
Сообщений: 478
Завершенные тесты: 4
20.10.2016, 16:26     Либо удваивая одиночные, либо заменяя сдвоенные одним символом, привести строку к заданному виду
Вот решил. Посмотрите:
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
#include <iostream>
 
using namespace std;
 
void get_freq(const char* str, char* pchars)
{
    for (int index = 0; str[index] != '\0'; index++)
    {
        int count = 0; char ch = str[index];
        for (int nindex = index; str[nindex] != '\0'; nindex++)
            if (str[nindex] == ch) count++;
 
        if (pchars[ch] <= 0) pchars[ch] = count;
    }
}
 
void main(void)
{
    const int N = 3;
 
    char input[N][256] = { "aaaza", "aazzaa", "azzza" };
    char output[256] = "aazza";
 
    char pchars[N + 1][256] = { { 0 } };
    get_freq(output, pchars[0]);
 
    int op_cnts[3] = { 0 };
    for (char ch = 'a'; ch <= 'z'; ch++)
    {
        int count = -1;
        if ((count = pchars[0][ch]) > 0)
        {
            for (int index = 0; index < N; index++)
            {
                get_freq(input[index], pchars[index + 1]);
                if (pchars[0][ch] < pchars[index + 1][ch])
                {
                    while (pchars[0][ch] != pchars[index + 1][ch])
                    {
                        int nindex = 0; bool found = false;
                        while (input[index][nindex] != '\0' && !found)
                            if (input[index][nindex++] == ch)
                            {
                                int t_index = nindex - 1;
                                while (input[index][t_index] != '\0')
                                {
                                    input[index][t_index] = input[index][t_index + 1];
                                    t_index++;
                                }
 
                                found = true;
                            }
 
                        pchars[index + 1][ch]--; op_cnts[index]++;
                    }
                }
 
                else if (pchars[0][ch] > pchars[index + 1][ch])
                {
                    while (pchars[0][ch] != pchars[index + 1][ch])
                    {
                        int nindex = 0;
                        while (input[index][nindex] != ch &&
                            input[index][nindex] != '\0') nindex++;
 
                        int rindex = strlen(input[index]) - 1;
                        while (rindex >= nindex)
                        {
                            input[index][rindex + 1] = input[index][rindex];
                            rindex--;
                        }
 
                        pchars[index + 1][ch]++; op_cnts[index]++;
                    }
                }       
            }
        }
    }
 
    int count = 0, min_op = -1;
    for (int index = 0; index < N; index++)
        if (strcmp(input[index], output) == 0) count++;
 
    for (int index = 0; index < N && count > 0; index++)
        if ((strcmp(input[index], output) == 0 && 
            op_cnts[index] < op_cnts[min_op]) || (min_op == -1))
        {
            min_op = index;
        }
 
    if (count <= 0) std::cout << "IMPOSSIBLE" << endl;
    else std::cout << "string = " << input[min_op] << " op_count = " << op_cnts[min_op] << endl;
 
    _getch();
}
Это пятая задача из муниципального этапа олимпиады, она не должна быть очень сложной:
Данная задача очень сложная и NP-hard пропорциональная. Это один из возможных вариантов решения (не оптимизированный). Пробуйте.
Миниатюры
Либо удваивая одиночные, либо заменяя сдвоенные одним символом, привести строку к заданному виду  
 
Текущее время: 07:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru