Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/22: Рейтинг темы: голосов - 22, средняя оценка - 4.68
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200

Лэйс на с++

18.11.2010, 16:07. Показов 5098. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
int main () {
    int lays=0;
    char mas[1001];
    cin>>mas;
    for (int i=0; i<=strlen(mas);i++)
        if ('(')
        lays++;
    
    if ('(')
        lays--;
        cout<<"VALID"<<endl;
    
    if (lays==0)
        cout<<"INVALID"<<endl;
    
        return 0;
}
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.11.2010, 21:23
Студворк — интернет-сервис помощи студентам
На самом деле в лоб это вот так.
Хотя это тоже не тащит.

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
#include <iostream>
#include <string>
 
int main (int argc, char * const argv[]) {
        std::string string;
        int counter_round_br = 0;
        int counter_square_br = 0;
        int counter_fig_br=0;
        std::cin >> string;
        
        for (int i = 0; i < string.size() && counter_round_br >= 0 
            && counter_square_br>=0 && counter_fig_br>=0; ++i) {
                switch(string[i])
                {
                    case '(' :
                       counter_round_br++;
                       break;
                    case ')' :
                       counter_round_br--;
                       break;
                    case '[' :
                       counter_square_br++;
                       break;
                    case ']' :
                       counter_square_br--;
                       break;
                    case '{' :
                       counter_fig_br++;
                       break;
                    case '}' :
                       counter_fig_br--;
                       break;
                }
        }
        
        if (counter_round_br == 0 &&
            counter_square_br == 0 &&
            counter_fig_br==0) std::cout << "Скобки расставлены верно." << std::endl;
        else std::cout << "Скобки расставлены неверно." << std::endl;
 
        return 0;
}
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
18.11.2010, 21:30
Hardcore, просто интересно, а где ты учишься?
И что такое контестор?
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
18.11.2010, 21:34
ForEveR, не, вот такую строку разберет не правильно: "([)]" Выдаст true, хотя ответ false.
0
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 21:35  [ТС]
я учусь в IITU.kz
а задачи кидаем в контестор http://contester.iitu.kz
ForEveR, там после того как ты вводишь 1-ую строку сразу выводит yes.
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
18.11.2010, 21:49
Я думаю алгоритм такой: находим ближние скобки одного типа, если между ними есть скобка (скобки) то значит они стоят не правильно, если нет, то удаляем эти скобки из строки и повторяем процедуру.
Можно даже сделать рекурсию. Я парсер для калькулятора именно так писал, но у меня там работа только с круглыми скобками.

Добавлено через 10 минут
Вот
кусок кода
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
vector<int>Lbr;
    vector<int>Rbr;
    int len=(int)strlen(S);
    for(int i=0;i<len;i++){//находим скобки
        if(S[i]=='('){
            Lbr.push_back(i);}
        if(S[i]==')')
            Rbr.push_back(i);
    }
    if(Lbr.size()!=Rbr.size())
        //myerror(1);//
    int min=(Rbr.at((int)Rbr.size()-1)-Lbr.at(0));
    int rbr=Rbr.at((int)Rbr.size()-1);
    int lbr=Lbr.at(0);
    for(int i=0;i<(int)Rbr.size();i++) { //находим самые ближние скобки
        for(int j=0;j<(int)Rbr.size();j++)
        if(min>(Rbr.at(i)-Lbr.at(j))&&((Rbr.at(i)-Lbr.at(j))>0)){
            min=Rbr.at(i)-Lbr.at(j);
            lbr=Lbr.at(j);
            rbr=Rbr.at(i);
            
        }
    }
        cout<<"Blizhnie skobki na mestah "<<lbr+1<<" i "<<rbr+1<<endl;
- находит самые ближние скобки в строке. Может немного замудрено, но работает))
1
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 21:50  [ТС]
напиши) главное чтоб сначало количество скобок а потом ввод скобок.
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
18.11.2010, 22:16
Hardcore, попробуй сам, что ли, пошевелиться. Тебе уже написали несколько рабочих вариантов. Подредактируй под себя.
0
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 22:18  [ТС]
Пробовал.
ввожу цифру, потом скобки, а потом прерываться и выводит error.
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
18.11.2010, 22:25
Ну да, если "выводит error", то, пожалуй, ничего не поделаешь. Придётся бросать программирование.
0
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 22:27  [ТС]
смешно) да дело не в этом. просто не вышло решил спросить тут на форуме помощь.
они подкидывают идеи, я пробую.
0
Заблокирован
19.11.2010, 00:21
Ну вы жжоте, "программисты"

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
#include <iostream>
#include <string>
#include <map>
#include <stack>
 
class Brackets
{
private:
    std::map<char, char> _bkts;
 
    Brackets()
    {
        _bkts['('] = ')';
        _bkts['['] = ']';
        _bkts['{'] = '}';
    }
public:
    static Brackets& getInstance()
    {
        static Brackets brackets;
        return brackets;
    }
 
    bool IsLeftBracket(char c)
    {
        return _bkts.find(c) != _bkts.end();
    }
 
    bool IsRightBracket(char c)
    {
        for (std::map<char, char>::iterator it = _bkts.begin(); it != _bkts.end(); it++)
            if (it->second == c)
                return true;
 
        return false;
    }
 
    bool IsPair(char first, char second)
    {
        return _bkts.find(first) != _bkts.end() && _bkts[first] == second;
    }
};
 
int main()
{
    std::string source;
    std::cin >> source;
 
    bool ok = true;
    std::stack<char> stck;
 
    for (std::string::iterator it = source.begin(); it != source.end(); it++)
    {
        if (Brackets::getInstance().IsLeftBracket(*it))
            stck.push(*it);
        else if (Brackets::getInstance().IsRightBracket(*it))
        {
            if (stck.empty())
            {
                std::cout << "Empty stack. Invalid bracket: " << *it << std::endl;
                ok = false;
                break;
            }
            else if (Brackets::getInstance().IsPair(stck.top(), *it))
            {
                stck.pop();
            }
            else
            {
                std::cout << "Invalid pair: " << stck.top() 
                       << " and " << *it << std::endl;
                stck.pop();
                ok = false;
                break;
            }
        }
    }
 
    if (ok)
    {
        if (!stck.empty())
            std::cout << "Stack not empty!" << std::endl;
        else
            std::cout << "OK!" << std::endl;
    }
 
    return 0;
}
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
19.11.2010, 01:02
NightmareZ, если имеешь смелость других в кавычки заключать, то вот тебе повод для размышления:
"Синглтон" твой на самом деле не синглтон, потому что не запрещён конструктор копирования. К тому же работа с синглтоном через "getInstance" — дурной тон. Нужно оборачивать вызовы в статические методы.
Далее, если работа со строковыми итераторами ещё вопрос спорный (тебе, конечно же, известно, что строковые итераторы имеют очень ограниченную область применения), то использование постфиксного инкремента — одназначная лажа.
Ну и, наконец, совершенно неинформативные сообщения. Пользователю пофиг на стек, ему нужно знать, какие данные он ввёл неправильно, и как эту ситуацию исправить.
0
Заблокирован
19.11.2010, 04:29
Цитата Сообщение от volovzi Посмотреть сообщение
NightmareZ, если имеешь смелость других в кавычки заключать, то вот тебе повод для размышления:
Да, сделай это, придирись к мелочам

Цитата Сообщение от volovzi Посмотреть сообщение
"Синглтон" твой на самом деле не синглтон, потому что не запрещён конструктор копирования. К тому же работа с синглтоном через "getInstance" — дурной тон. Нужно оборачивать вызовы в статические методы.
Я рад за тебя, что ты разглядел где-то там синглетон, а также рад, что ты знаешь этот паттерн, но какбэ я и не собирался синглетон делать. Мне нужно было две вещи: удобная инициализация map и несколько функций для работы с ним, что я и сделал. А то, что это не вписалось в рамки твоего мировозрения - могу лишь пособолезновать.

Да, я мог бы использовать список инициализации, но подумал, что целевой компилятор вполне может их не поддерживать, потому не стал.

Цитата Сообщение от volovzi Посмотреть сообщение
Далее, если работа со строковыми итераторами ещё вопрос спорный (тебе, конечно же, известно, что строковые итераторы имеют очень ограниченную область применения)
Развивай мысль, я тебя плохо понимаю. Только, плиз, о том, что касается непосредственно задачи, а не какие-нить неоретические измышления, как было выше по поводу паттернов.

Цитата Сообщение от volovzi Посмотреть сообщение
то использование постфиксного инкремента — одназначная лажа.
С этим соглашусь.

Цитата Сообщение от volovzi Посмотреть сообщение
Ну и, наконец, совершенно неинформативные сообщения. Пользователю пофиг на стек, ему нужно знать, какие данные он ввёл неправильно, и как эту ситуацию исправить.
Говорят, когда не к чему особо придраться, придираются к пунктуации, грамматике и "неинформативным сообщениям".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru