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

Выяснить, можно ли добавить в последовательность цифры и знаки арифметических действий - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
macros09
0 / 0 / 0
Регистрация: 30.03.2013
Сообщений: 11
01.04.2013, 21:37     Выяснить, можно ли добавить в последовательность цифры и знаки арифметических действий #1
1. Дана последовательность из N круглых, квадратных и фигурных скобок. Выяснить, можно ли добавить в неё цифры и знаки арифметических действий так, чтобы получилось правильное арифметическое выражение.
Ограничения: 1 <= N <= 100 000.
Ввод: В первой строке находится число скобок N, во второй - N символов из набора (, ), [, ], {, }.
Вывод: Выводится слово "Yes", если получить правильное арифметическое выражение можно, или "No", если нельзя.
Примеры
Ввод 1 Ввод 2
6 24
([())] {[()([]{})[]]({}{{}})}[]
Вывод 1 Вывод 2
No Yes

2. Бинарный поиск в массиве (рекурсия)
3. Бинарное возведение в степень (рекурсия)

Очень нужно, помогите.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2013, 21:37     Выяснить, можно ли добавить в последовательность цифры и знаки арифметических действий
Посмотрите здесь:

C++ Расставить знаки арифметических операций так, чтобы сошелся результат
C++ Программа выполнения арифметических действий с очень большим целыми числами
Выяснить можно ли с поля (k,l) одним ходом ферьзя попасть на поле(m,n). Если нет, то выяснить, как это можно сделать за два хода C++
Выяснить, к чему приводятся переменные типа bool в арифметических выражениях C++
C++ Можно ли добавить в последовательность из различных скобок цифры и знаки, чтобы получилось правильное арифметическое выражение?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Friday
ну и долго меня небыло...
 Аватар для Friday
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
01.04.2013, 21:40     Выяснить, можно ли добавить в последовательность цифры и знаки арифметических действий #2
у меня тут проект целый)

main.cpp
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
#include <iostream>
#include <cstring>
#include "check.h"
using namespace std;
 
 
 
int main()
{
    char brackets[500];
    bool correct = false;
    int count = 0;
    cout << "Enter a string: " << endl;
 
    while( brackets[(strlen(brackets)-1)] != *"`")
    {
        cin >> brackets;
        
        counter(brackets, count);
 
        if (!areBracketsCorrect(brackets) && strlen(brackets) > 1) 
        {                                                               
            cout << endl <<"Brackets have been put incorrectly" << endl;   
            return 0;                                                   
        }
        else
        correct = true;
 
    }
 
    if(correct && count == 0)
        cout << endl << "Brackets have been put correctly"  << count << endl;
    else
        cout << endl << "Brackets have been put incorrectly" << endl;   
 
    return 0;
}
hoob
19 / 11 / 1
Регистрация: 04.11.2012
Сообщений: 89
Записей в блоге: 1
01.04.2013, 21:40     Выяснить, можно ли добавить в последовательность цифры и знаки арифметических действий #3
Цитата Сообщение от macros09 Посмотреть сообщение
1. Дана последовательность из N круглых, квадратных и фигурных скобок. Выяснить, можно ли добавить в неё цифры и знаки арифметических действий так, чтобы получилось правильное арифметическое выражение.
Ограничения: 1 <= N <= 100 000.
Ввод: В первой строке находится число скобок N, во второй - N символов из набора (, ), [, ], {, }.
Вывод: Выводится слово "Yes", если получить правильное арифметическое выражение можно, или "No", если нельзя.
Примеры
Ввод 1 Ввод 2
6 24
([())] {[()([]{})[]]({}{{}})}[]
Вывод 1 Вывод 2
No Yes

2. Бинарный поиск в массиве (рекурсия)
3. Бинарное возведение в степень (рекурсия)

Очень нужно, помогите.


Ваши наработки?
Friday
ну и долго меня небыло...
 Аватар для Friday
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
01.04.2013, 21:41     Выяснить, можно ли добавить в последовательность цифры и знаки арифметических действий #4
check.cpp
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
#include <iostream>
#include <cstring>
#include "check.h"
using namespace std;
 
bool areBracketsCorrect(char brackets[])
{
    char last_open_bracket = '@';          
    char stack[80];
    int pos = -1;
 
    int round = 0; 
    int figured = 0; 
    int squared = 0;
 
 
    for(int i=0; i < strlen(brackets)+1; i++)
    {
        if(brackets[i] == '(')
            round++;
 
        if(brackets[i] == ')')
            round--;
 
        if (brackets[i] == '{') 
            figured++;
 
        if (brackets[i] == '}') 
            figured--;
 
        if (brackets[i] == '[') 
            squared++;  
 
        if (brackets[i] == ']') 
            squared--; 
 
        if ( brackets[i] == '(' || 
             brackets[i] == '{' ||
             brackets[i] == '[' )
        {
            last_open_bracket = brackets[i];          
            pos++;                     
            stack[pos] = brackets[i];         
        }
 
            if (  brackets[i] == ')' && last_open_bracket != '('  ||
                  brackets[i] == '}' && last_open_bracket != '{'  ||
                  brackets[i] == ']' && last_open_bracket != '[' )
            break;
 
        if ( brackets[i] == ')' || brackets[i] == '}' || brackets[i] == ']' )
        {
            pos--;                           
            if (pos >= 0)
                last_open_bracket = stack[pos];
        }
    }
 
    if (round || figured || squared)
        return false;
    else
        return true;
 
}
 
void counter(char brackets[], int &count)
{
 
        if(*brackets == *"(" || *brackets == *"{" || *brackets == *"[")
            count++;
 
        if(*brackets == *")" || *brackets == *"}" || *brackets == *"]")
            count--;
 
}
Добавлено через 37 секунд
check.h
C++
1
2
bool areBracketsCorrect(char brackets[]);
void counter(char brackets[], int &cont);
Yandex
Объявления
01.04.2013, 21:41     Выяснить, можно ли добавить в последовательность цифры и знаки арифметических действий
Ответ Создать тему
Опции темы

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