Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 28

Сколько нужно убрать из данной последовательности скобок, чтобы получить правильную последовательность?

16.10.2014, 18:07. Показов 1965. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сколько надо убрать скобок
из данной последовательности скобок что бы получить правильную последовательность?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.10.2014, 18:07
Ответы с готовыми решениями:

Сколько слагаемых нужно взять из последовательности, чтобы получить указанное число
Не так давно начал работать с VB (около полугода) решал не сложные задачи и уже стою на цикле с постусловием и тут возник вопрос?. Что я не...

Сколько чисел нужно взять в последовательности чтобы получить число, больше чем N?
Сколько чисел нужно взять в последовательности чтобы получить число, больше чем N?

Сколько чисел нужно взять в последовательности 1+1/2+1/3+1/4.+…, чтобы получить число большее, чем N
1. Сколько чисел нужно взять в последовательности 1+1/2+1/3+1/4.+…, чтобы получить число большее, чем N? Добавлено через 1 час 11...

12
55 / 56 / 37
Регистрация: 06.02.2013
Сообщений: 257
Записей в блоге: 1
16.10.2014, 18:10
andreye, то есть сделать так ((( ))(()))))) и результат должен быть такой 3?
0
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 28
16.10.2014, 18:10  [ТС]
К примеру ())(() ответ 2
0
55 / 56 / 37
Регистрация: 06.02.2013
Сообщений: 257
Записей в блоге: 1
16.10.2014, 18:29
andreye, не понятный пример, приведи другой! Я не могу понять, как ты хочешь, чтобы программа считала

Добавлено через 2 минуты
andreye, ты хочешь, чтобы считали лишние скобки (()()))((())) и оставались только ()()()???
0
 Аватар для TrueBit
100 / 100 / 47
Регистрация: 19.11.2012
Сообщений: 195
16.10.2014, 18:34
Попробуйте это:
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
#include <iostream>
#include <string>
 
int main() {
    //std::string expression("((())(())))))");
    std::string expression("())(()");
    int count=0; // для открывающих ++, для закрывающих --
    int error=0; // число скобок на удаление
 
    for(size_t i=0; i<expression.size(); i++) {
        if(expression[i] == '(') { // открывающая, значит ++
            count++;
            continue;
        }
        if(expression[i] == ')') { // закоывающая
            if(count==0) // если все открывающие обеспечены
                error++; // ошибка
            else
                count--; // иначе обеспечиваем открывающую
        }
    }
    error+=count; // добавляем число не обеспеченных открытых
 
    std::cout << "error = " << error << std::endl;
    return 0;
}
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
16.10.2014, 18:36
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
#include <iostream>
 
 using namespace std;
 
int main() {
    int counterIn = 0;
    int counterOut = 0;
    char sign;
    
    for ( ; cin >> sign && sign != '\0'; ) {
        if ( sign == '(' ) {
            counterIn += 1;
        }
        if ( sign == ')' ) {
            counterOut += 1;
        }
    }
    counterIn -= counterOut;
    
    if ( counterIn < 0 ) {
        counterIn *= -1;
    }
    
    cout << counterIn << endl;
    
    return 0;
}
Code
1
2
3
4
@stdin:
()))
@stdout:
2
0
55 / 56 / 37
Регистрация: 06.02.2013
Сообщений: 257
Записей в блоге: 1
16.10.2014, 18:37
andreye, TrueBit, Может лучше это?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
 
using namespace std;
int main()
{
    setlocale(0,"Rus");
    char str[255];
    int count=0;
    cout<<"Ââåäèòå ñòðîêó: ";
    cin>>str;
    for (int i=0; i<strlen(str); i++)
    {
        if (str[i]=='(' && str[i+1]==')')
           count--;
        else count++;
    }
    cout<<count<<endl;
    system("pause");
    return 0;
}
0
 Аватар для TrueBit
100 / 100 / 47
Регистрация: 19.11.2012
Сообщений: 195
16.10.2014, 18:43
Цитата Сообщение от andreye Посмотреть сообщение
Сколько надо убрать скобок
из данной последовательности скобок что бы получить правильную последовательность?
Цитата Сообщение от Константин_2012 Посмотреть сообщение
andreye, TrueBit, Может лучше это?
для изначально правильной последовательности:
Bash
1
(())
просит удалить 2 скобки
0
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 28
16.10.2014, 18:52  [ТС]
А как ето сделать на паскаль
0
 Аватар для TrueBit
100 / 100 / 47
Регистрация: 19.11.2012
Сообщений: 195
16.10.2014, 18:53
Цитата Сообщение от TrueBit Посмотреть сообщение
andreye, TrueBit, Может лучше это?
Еще при длине строки 4:
Bash
1
(())
strlen(str) вернет значение 4, тогда в цикле
C++
1
for (int i=0; i<strlen(str); i++)
максимальное значение, которое примет i Будет i<4, то есть 3, а значит для
C++
1
if (str[i]=='(' && str[i+1]==')')
будет выполнено на последней итерации
C++
1
if (str[3]=='(' && str[4]==')')
но нумерация идет с нуля, поэтому str[4] - пятый элемент, которого в строке нет. То есть выход за границы массива. В данном случае программа не упадет, поскольку str[255]. И в той ячейке будет записан 0

Цитата Сообщение от andreye Посмотреть сообщение
А как ето сделать на паскаль
Это раздел по c++. Для pascal есть соответствующий раздел.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
16.10.2014, 19:07
andreye, при чём тут Паскаль? Учи Си!

Добавлено через 12 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <string>
#include <stack>
#include <iostream>  
using namespace std;
int main(){
    int cnt=0;
    string str;
    stack<int> stk;
    getline(cin, str);
    for (int i=0; i<str.size(); ++i){
       if (str[i]=='('){
            stk.push(i);
            continue;
       }
       if (str[i]==')'){
            if (stk.empty()) ++cnt;
            else             stk.pop();
       }
    }
    cnt+=stk.size();
    cout<<cnt;
    return 0;
}
0
55 / 56 / 37
Регистрация: 06.02.2013
Сообщений: 257
Записей в блоге: 1
16.10.2014, 20:27
TrueBit, да, ошибки есть, я с работы уже уезжать собирался и упустил это всё дело, да и не проверял программу. Спасибо
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
16.10.2014, 23:16
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/////////////////////////////////////////////////////////////////////////////////////////
//Сколько надо убрать скобок из данной последовательности скобок чтобы получить правильную 
//последовательность?
//К примеру ())(() ответ 2
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <ctime>
#include <iostream>
#include <iterator>
#include <random>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
const   char    LEFT_BRACKET    =   '(';
const   char    RIGHT_BRACKET   =   ')';
const   char    SPACE_SYMB      =   ' ';
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string                             T_str;
typedef T_str::size_type                        T_pos;
typedef std::uniform_int_distribution< char >   T_char_distribution;
/////////////////////////////////////////////////////////////////////////////////////////
T_str   get_rand_brackets_sequence_with_len( int    len )
{
    static  std::default_random_engine  rand_generator      (   unsigned(time(0))               );
    static  T_char_distribution         char_distribution   (   LEFT_BRACKET,   RIGHT_BRACKET   );
 
    T_str   res;
 
    std::generate_n
        (
            std::back_inserter( res ),
            len,
 
            [&] ()
            {
                return  char_distribution( rand_generator );
            }
        );
 
    return  res;
}
/////////////////////////////////////////////////////////////////////////////////////////
void    for_brackets_sequence_set_extra_brackets_and_correct_sequence_and_counter
    (
        T_str   const   &   brackets_sequence,
        T_str           &   extra_brackets,
        T_str           &   correct_brackets_sequence,
        int             &   correct_brackets_counter
    )
{
    extra_brackets  =   brackets_sequence;
 
    correct_brackets_sequence   =   T_str   (
                                                brackets_sequence.size(),
                                                SPACE_SYMB
                                            );
 
    correct_brackets_counter    =   0;
 
    for( size_t  substr_len = 2; substr_len <= brackets_sequence.size(); substr_len += 2 )
    {
        T_str   substr  (
                            substr_len,
                            SPACE_SYMB
                        );
 
        substr.front    ()  =   LEFT_BRACKET;
        substr.back     ()  =   RIGHT_BRACKET;
 
        for(;;)
        {
            auto    pos     =   extra_brackets.find( substr );
 
            if( pos     ==  T_str::npos )
            {
                break;
            }
 
            correct_brackets_counter    +=  2;
 
            extra_brackets.replace              ( pos,                      1,  1,  SPACE_SYMB      );
            extra_brackets.replace              ( pos + substr_len - 1,     1,  1,  SPACE_SYMB      );
 
            correct_brackets_sequence.replace   ( pos,                      1,  1,  LEFT_BRACKET    );
            correct_brackets_sequence.replace   ( pos + substr_len - 1,     1,  1,  RIGHT_BRACKET   );
        }//for
    }//for
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
    const   int     RAND_BRACKETS_SEQ_LEN   =   10;
 
    for(;;)
    {
        T_str   rand_brackets_sequence      =   get_rand_brackets_sequence_with_len( RAND_BRACKETS_SEQ_LEN );
        T_str   extra_brackets;
        T_str   correct_brackets_sequence;
        int     correct_brackets_counter    =   0;
 
        for_brackets_sequence_set_extra_brackets_and_correct_sequence_and_counter
            (
                rand_brackets_sequence,
                extra_brackets,
                correct_brackets_sequence,
                correct_brackets_counter
            );
 
        std::cout   <<  std::endl
                    <<  std::endl
                    <<  std::endl
                    <<  "В последовательности скобок"
                    <<  std::endl
                    <<  rand_brackets_sequence
                    <<  std::endl
                    <<  "нужно убрать скобки "
                    <<  std::endl
                    <<  extra_brackets
                    <<  std::endl
                    <<  "в количестве "
                    <<  RAND_BRACKETS_SEQ_LEN - correct_brackets_counter
                    <<  ", чтобы получить корректную последовательность "
                    <<  std::endl
                    <<  correct_brackets_sequence
                    <<  std::endl;
 
        system("pause");
    }//for
}
Добавлено через 2 часа 15 минут
Через стек вот так проще:
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
/////////////////////////////////////////////////////////////////////////////////////////
//Сколько надо убрать скобок из данной последовательности скобок чтобы получить правильную 
//последовательность?
//К примеру ())(() ответ 2
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <ctime>
#include <iostream>
#include <iterator>
#include <random>
#include <stack>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
const   char    LEFT_BRACKET    =   '(';
const   char    RIGHT_BRACKET   =   ')';
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string                             T_str;
typedef std::uniform_int_distribution< char >   T_char_distribution;
/////////////////////////////////////////////////////////////////////////////////////////
T_str   get_rand_brackets_sequence_with_len( int    len )
{
    static  std::default_random_engine  rand_generator          (   unsigned(time(0))               );
    static  T_char_distribution         brackets_distribution   (   LEFT_BRACKET,   RIGHT_BRACKET   );
 
    T_str   res;
 
    std::generate_n
        (
            std::back_inserter  ( res ),
            len,
 
            [&]                 ()
            {
                return  brackets_distribution( rand_generator );
            }
        );
 
    return  res;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     count_extra_brackets( T_str   const   &   brackets_sequence )
{
    std::stack< char >  stack;
 
    std::for_each
        (
            brackets_sequence.begin     (),
            brackets_sequence.end       (),
 
            [&]                         ( char  c )
            {
                if  (
                            c                   ==  RIGHT_BRACKET
                        &&  !stack.empty    ()
                        &&  stack.top       ()  ==  LEFT_BRACKET
                    )
                {
                    stack.pop   ();
                }
                else
                {
                    stack.push  ( c );
                }
            }
        );
 
    return  stack.size();
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
    const   int     RAND_BRACKETS_SEQ_LEN   =   10;
 
    for(;;)
    {
        T_str   rand_brackets_sequence      =   get_rand_brackets_sequence_with_len( RAND_BRACKETS_SEQ_LEN );
 
        std::cout   <<  std::endl
                    <<  std::endl
                    <<  std::endl
                    <<  std::endl
                    <<  "В последовательности скобок"
                    <<  std::endl
                    <<  rand_brackets_sequence
                    <<  std::endl
                    <<  "нужно убрать "
                    <<  count_extra_brackets( rand_brackets_sequence )
                    <<  " скобок, чтобы получить корректную последовательность."
                    <<  std::endl;
 
        system("pause");
    }//for
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.10.2014, 23:16
Помогаю со студенческими работами здесь

Сколько чисел нужно взять в последовательности , чтобы получить число, больше чем N
Доброго времени суток. Уважаемые господа помогите с решением задачи! Сколько чисел нужно взять в последовательности 1/2+1/3+1/4+..., ...

Сколько чисел нужно взять в последовательности 1+2+3+4+…, чтобы получить число, большее чем N?
Сколько чисел нужно взять в последовательности 1+2+3+4+…, чтобы получить число, большее чем N?

Дана последовательность символов. Определить сколько букв латинского алфавита встречается в данной последовательности
Дана последовательность символов. Определить сколько букв латинского алфавита встречается в данной последовательности.

Сколько пластин надо собрать, чтобы получить конденсатор данной ёмкости?
Сколько пластин площадью 0,01м^2 надо собрать, чтобы получить конденсатор емкостью 1 мкФ, если в качестве диэлектрика использовать...

Сколько чисел последовательности нужно взять, чтобы их сумма превысила 1000
Сколько чисел последовательности 2, 4, 6, 8, ... нужно взять, чтобы их сумма превысила 1000? Вывести величину последнего слагаемого и...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru