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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.90
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 16:07     Лэйс на с++ #1
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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jambas92
 Аватар для jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
18.11.2010, 16:30     Лэйс на с++ #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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--;
               }
        
        if (lays==0)
                cout<<"INVALID"<<endl;
        else
                cout<<"VALID"<<endl; // вот так должно быть
                return 0;
}
Добавлено через 1 минуту
и тебе не хватает еще одного условия!!!! например если строка начинается с ) и заканчивается с ( то это заведомо ложное условие))))
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.11.2010, 16:33     Лэйс на с++ #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int main () {
        int lays=0;
        char mas[1001];
        cin>>mas;
        for (int i=0; i<strlen(mas);i++)
        {
                if (mas[i]=='(')
                   lays++;
        
                else if (mas[i]==')')
                   lays--;
        }
        
        if (lays==0)
                cout<<"VALID"<<endl;
        else
               cout<<"INVALID"<<endl;
        return 0;
}
Добавлено через 1 минуту
jambas92, Ваш код косячнее предыдущего... Во первых что это за условие?
if('(') - вам не кажется, что всегда будет возвращено true?
Во вторых если кол-во скобок - 0, тогда все правильно, иначе нет.
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 16:35  [ТС]     Лэйс на с++ #4
ForEveR, если написать как ты не будет правильно работать.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.11.2010, 16:36     Лэйс на с++ #5
Hardcore, Пример?

Введите в программу.

(n+(2+(3+4)+5))
И посмотрите что вам выдаст.
Смотрите последний исправленный код. В первый раз немного протупил.
jambas92
 Аватар для jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
18.11.2010, 16:44     Лэйс на с++ #6
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
#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--;
        }
    }
 
    if (lays==0)
    {
        cout<<"VALID"<<endl;
    }
    else
    {
        cout<<"INVALID"<<endl; 
    }
    return 0;
}
Добавлено через 1 минуту
вот он норм вид!!!! осталось добавить еще одно условие для полного счастья))))

Добавлено через 3 минуты
C++
1
2
3
4
5
if (mas[0]==')' || mas[strlen(mas)-1]=='(')
{
    cout << "INVALID";
    return 0;
}
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 16:47  [ТС]     Лэйс на с++ #7
if (mas[0]==')' && strlen(mas)=='(')
вот это?

Добавлено через 1 минуту
я был близок.
jambas92
 Аватар для jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
18.11.2010, 16:50     Лэйс на с++ #8
не и (&&) , а или (||)
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 16:50  [ТС]     Лэйс на с++ #9
я отправил пишет тест 4.
??

кстати в твоем коде я пишу и так () и так )(
всё равно пишет VALID
jambas92
 Аватар для jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
18.11.2010, 16:54     Лэйс на с++ #10
смотри в немательно
if (mas[0]==')' || mas[strlen(mas)-1]=='(')
{
cout << "INVALID";
return 0;
}
ты скорее всего забываешь минус 1 поставить!!!!!!!!!1
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.11.2010, 16:55     Лэйс на с++ #11
C++
1
2
3
4
5
6
7
8
9
10
11
        for (int i=0; i<=strlen(mas);i++)
        {
                if ('(')
                {
                        lays++;
                }
                if (')') 
                {
                        lays--;
                }
        }
ЭТО РАЗВЕ ПРОВЕРКА?!
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 16:58  [ТС]     Лэйс на с++ #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
24
25
26
27
28
#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--;
                }
        }
 
        if (lays==0)
        {
                cout<<"VALID"<<endl;
        }
        else
   if (mas[0]==')' || mas[strlen(mas)-1]=='(')
{
        cout << "INVALID";
   }
        return 0;
}
вот так отправил
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.11.2010, 16:59     Лэйс на с++ #13
Hardcore, Не пройдет. И знаете почему?
C++
1
2
3
4
5
6
7
8
        for (int i=0; i<=strlen(mas);i++){
                if ('('){
                        lays++;
                }
                if (')') {
                        lays--;
                }
        }
Во-первых выход за пределы массива. ВО вторых - нет сравнения элементов строки.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
18.11.2010, 17:03     Лэйс на с++ #14
Последнего условия недостаточно, т.к. если написать "())(()", то оно не сработает. Надо обобщить.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
18.11.2010, 17:05     Лэйс на с++ #15
Цитата Сообщение от Hardcore Посмотреть сообщение
for (int i=0; i<=strlen(mas);i++)
через while+указатель сделай, зачем по сто раз по строке бегать(strlen).
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 17:06  [ТС]     Лэйс на с++ #16
Forevor, по смотри в моем последнем коде ошибку.
ввод () валид
ввод )( инвалид.
ошибка такая ка бы я не вводил отвечает валид.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.11.2010, 17:19     Лэйс на с++ #17
Hardcore, Я уже сказал ошибку...
пробуй так.
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
#include <iostream>
using namespace std;
int main () {
        int lays=0;
        char mas[1001];
        cin>>mas;
        int len=strlen(mas);
        try
        {
        for (int i=0; i<len;i++)
        {
                if (mas[i]=='(')
                   lays++;
        
                else if (mas[i]==')')
                   lays--;
                if(lays<0)
                   throw std::logic_error("INVALID");
        }
        }
        catch(const std::exception& e)
        {
            std::cerr<<e.what()<<'\n';
            return 1;
        }
        if (lays==0)
                cout<<"VALID"<<endl;
        else
               cout<<"INVALID"<<endl;
        return 0;
}
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
18.11.2010, 17:20     Лэйс на с++ #18
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>
 
int main()
{
        std::string str;
        int lays = 0;
 
        std::cout << "< ";
        std::cin >> str;
 
        for(std::string::size_type i = 0; i < str.length(); ++i) {
                if(str[i] == '(')
                        ++lays;
                else if(str[i] == ')')
                        --lays;
 
                if(lays < 0)
                        break;
        }
 
        if(lays != 0)
                std::cout << "invalid" << std::endl;
        else
                std::cout << "valid" << std::endl;
 
        return 0;
}
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
18.11.2010, 17:21     Лэйс на с++ #19
Придумал, как красиво учесть порядок поступления скобок: если счётчик становится меньше нуля, то это значит, что скобка закрылась без открытия, и цикл можно прекращать.

Добавлено через 36 секунд
Э, ребята, перемудрили вы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
int main (int argc, char * const argv[]) {
    std::string string;
    int counter = 0;
    
    std::cin >> string;
    
    for (int i = 0; i < string.size() && counter >= 0; ++i) {
        if (string[i] == '(') ++counter;
        else if (string[i] == ')') --counter;
    }
    
    if (counter == 0) std::cout << "Скобки расставлены верно." << std::endl;
    else std::cout << "Скобки расставлены неверно." << std::endl;
 
    return 0;
}
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 17:29  [ТС]     Лэйс на с++ #20
А если усложнить задачу.
6
([())] No

24
{[()([]{})[]]({}{{}})}[] Yes

вот так вот?
у мнея вообще нет мыслей как это можно написать?
Yandex
Объявления
18.11.2010, 17:29     Лэйс на с++
Ответ Создать тему
Опции темы

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