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

Лэйс на с++

18.11.2010, 16:07. Показов 4854. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж» Уважаемые коллеги! Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru