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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.90
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
#1

Лэйс на с++ - C++

18.11.2010, 16:07. Просмотров 2462. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
18.11.2010, 19:35 #31
Цитата Сообщение от Hardcore Посмотреть сообщение
мне надо сначало написать количество символов которые я должен ввести.
Зачем?
1
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 20:01  [ТС] #32
Это условие задачи.
Если можете помогите
0
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,275
Записей в блоге: 2
Завершенные тесты: 1
18.11.2010, 20:07 #33
Напишите условия задания полностью, а то по обрывакам фраз полная картина не понятна. Я недавно парсер для калькулятора писал, там у меня есть обработка скобок, может подойдет. (причем сначала написал через string потом подумал и сделал по другому, но строковая версия на компе осталась )
0
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 20:29  [ТС] #34
входные данные
6
([())] No

24
{[()([]{})[]]({}{{}})}[] Yes
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
18.11.2010, 20:44 #35
Hardcore, я думаю, что ты что-то неправильно понял. Ввод длины строки с последующим посимвольным считыванием в данном случае — лишняя работа. А лишнюю работу делать не нужно.
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
18.11.2010, 20:47 #36
volovzi, Для использования char* понадобится.
0
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,275
Записей в блоге: 2
Завершенные тесты: 1
18.11.2010, 20:49 #37
Цитата Сообщение от Kastaneda Посмотреть сообщение
Напишите условия задания полностью
Цитата Сообщение от Hardcore Посмотреть сообщение
входные данные
6
([())] No

24
{[()([]{})[]]({}{{}})}[] Yes
Это тест на интуицию? Нужно определить грамотно ли стоят скобки? А выше вы что-то про string писали? Потом выяснится, что нужно на С писать, а не на С++ )
0
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 20:51  [ТС] #38
вот условия
Input
The first line contains the number of brackets - N (1 ≤ N ≤ 100 000).
The second contains the sequence of N symbols from the set (,) [,] {,}.
Output
Displays the word "Yes", if you can get a correct arithmetic expression, or "No", if you can not.
перевод.
ввод
первая линия содержить количество скобок.
второая линия содержит скобки.
вывод
надо вывести да если условия соблюдены, если нет то вывести нет.
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
18.11.2010, 20:59 #39
Hardcore, да, задание дурацкое. В таком случае нужно не делать тупо и в лоб, а объяснить преподавателю, что можно сделать лучше.

P.S. А почему задание на "нерусском"?
0
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 21:04  [ТС] #40
у нас типа международный универ. и все предметы идут на англ. вот так вот. а в лоб нельзя, я понимаю что так легче. просто он в контесторе ставит тесты (условия).

Добавлено через 1 минуту
Цитата Сообщение от Kastaneda Посмотреть сообщение
Это тест на интуицию? Нужно определить грамотно ли стоят скобки? А выше вы что-то про string писали? Потом выяснится, что нужно на С писать, а не на С++ )
всё надо писать на с++
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
18.11.2010, 21:23 #41
На самом деле в лоб это вот так.
Хотя это тоже не тащит.

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
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
18.11.2010, 21:30 #42
Hardcore, просто интересно, а где ты учишься?
И что такое контестор?
0
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,275
Записей в блоге: 2
Завершенные тесты: 1
18.11.2010, 21:34 #43
ForEveR, не, вот такую строку разберет не правильно: "([)]" Выдаст true, хотя ответ false.
0
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 21:35  [ТС] #44
я учусь в IITU.kz
а задачи кидаем в контестор http://contester.iitu.kz
ForEveR, там после того как ты вводишь 1-ую строку сразу выводит yes.
0
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,275
Записей в блоге: 2
Завершенные тесты: 1
18.11.2010, 21:49 #45
Я думаю алгоритм такой: находим ближние скобки одного типа, если между ними есть скобка (скобки) то значит они стоят не правильно, если нет, то удаляем эти скобки из строки и повторяем процедуру.
Можно даже сделать рекурсию. Я парсер для калькулятора именно так писал, но у меня там работа только с круглыми скобками.

Добавлено через 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
Yandex
Объявления
18.11.2010, 21:49
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru