5 条题解

  • 45
    @ 2023-7-15 11:21:06

    表达式括号匹配

    ==思路==根据题意,可以使用栈解决,flag标记是否满足条件,初始化为1。循环输入新的字符,有三个特殊情况需要特殊处理:
    情况1:如果当前字符是'@',结束循环。
    情况2:如果当前字符是'('、'['、'{',将当前字符进栈。
    情况3:如果当前字符是')'、']'、'}',如果栈顶是和c配对左括号,则栈顶出栈, 否则说明不匹配,flag赋值0,并且结束循环。
    最后如果flag为1并且栈中没有元素,说明整个是匹配的,输出“YES”,否则输出“NO”
    ==参考代码==
    #include <iostream>
    #include <string>
    #include <stack>
    
    using namespace std;
    
    char c;
    stack<char> s;
    bool flag = 1;
    
    int main()
    {
        while(true)
        {
            cin >> c;
    
            if (c == '@') break;
    
            if (c == '(' || c == '[' || c == '{')
            {
                s.push(c);
            }
    
            if (c == ')')
            {
                if (s.top() == '(')
                    s.pop();
                else
                {
                    flag = 0;
                    break;
                }
            }
    
            if (c == ']')
            {
                if (s.top() == '[')
                    s.pop();
                else
                {
                    flag = 0;
                    break;
                }
            }
    
            if (c == '}')
            {
                if (s.top() == '{')
                    s.pop();
                else
                {
                    flag = 0;
                    break;
                }
            }
        }
    
        if (flag == 1 && s.size() == 0)
            cout << "YES";
        else
            cout << "NO";
    
        return 0;
    }
    

    点赞再抱走~~~

  • 6
    @ 2023-2-28 15:30:09
    思路 根据题意,可以使用栈解决定义字符型数组stk,top记录stk的栈顶,flag标记是否满足条件,初始化为1。循环输入新的字符,有三个特殊情况需要特殊处理:
    情况1:如果当前字符是'@',结束循环。
    情况2:如果当前字符是'('、'['、'{',将当前字符进栈,top++且stk[top]赋值为c。
    情况3:如果当前字符是')'、']'、'}',如果栈顶是和c配对左括号,则栈顶出栈,top--,否则说明不匹配,flag赋值0,并且结束循环。
    最后如果flag为1并且栈中没有元素,说明整个是匹配的,输出“YES”,否则输出“NO”
    代码
    
    #include<iostream>
    #include<string>
    using namespace std;
    char stk[51], c;
    int top = 0;
    bool flag = 1;
    int main()
    {
        do
        {
            cin >> c;
            if (c == '@') break;
            if (c == '(' || c == '[' || c == '{')
            {
                top++;
                stk[top] = c;
            }
            if (c == ')')
            {
                if (stk[top] == '(')
                    top--;
                else
                {
                    flag = 0;
                    break;
                }
            }
            if (c == ']')
            {
                if (stk[top] == '[')
                    top--;
                else
                {
                    flag = 0;
                    break;
                }
            }
            if (c == '}')
            {
                if (stk[top] == '{')
                    top--;
                else
                {
                    flag = 0;
                    break;
                }
            }
        }while (1);
        if (flag == 1 && top == 0)
            cout << "YES";
        else
            cout << "NO";
    }
    
    
    • @ 2023-5-20 18:26:55

      好奇地问一句,那个三角是怎么做出来的?

    • @ 2023-7-15 11:23:37

      @ 想知道就私

  • 1
    @ 2023-12-18 21:33:44

    Ac代码,请勿抄袭👍


    很简单


    #include<bits/stdc++.h>
    using namespace std;
    char c,s[266];
    int t=0;
    bool f=1;
    int main()
    {
        while(1){
            cin>>c;
            if(c=='@')break;
            if(c=='('||c=='['||c=='{'){
                t++;
                s[t]=c;
            }
            if(c==')'){
                if(s[t]=='(')t--;
                else {
                    f=0;
                    break;
                }
            }
            if(c==']'){
                if(s[t]=='[')t--;
                else {
                    f=0;
                    break;
                }
            }
            if(c=='}'){
                if(s[t]=='{')t--;
                else {
                    f=0;
                    break;
                }
            }
        }
        if(f && t==0)cout<<"YES";
        else cout<<"NO";
        return 0;
    }
    
    • -4
      @ 2023-12-15 20:31:17
      #include <iostream>
      #include <string>
      #include <stack>
      
      using namespace std;
      
      char c;
      stack<char> s;
      bool flag = 1;
      
      int main()
      {
          while(true)
          {
              cin >> c;
      
              if (c == '@') break;
      
              if (c == '(' || c == '[' || c == '{')
              {
                  s.push(c);
              }
      
              if (c == ')')
              {
                  if (s.top() == '(')
                      s.pop();
                  else
                  {
                      flag = 0;
                      break;
                  }
              }
      
              if (c == ']')
              {
                  if (s.top() == '[')
                      s.pop();
                  else
                  {
                      flag = 0;
                      break;
                  }
              }
      
              if (c == '}')
              {
                  if (s.top() == '{')
                      s.pop();
                  else
                  {
                      flag = 0;
                      break;
                  }
              }
          }
      
          if (flag == 1 && s.size() == 0)
              cout << "YES";
          else
              cout << "NO";
      
          return 0;
      }
      
      • -9
        @ 2023-8-6 13:00:07

        表达式括号匹配

        ==思路==

        根据题意,可以使用栈解决,flag标记是否满足条件,初始化为1。循环输入新的字符,有三个特殊情况需要特殊处理: 情况1:如果当前字符是'@',结束循环。 情况2:如果当前字符是'('、'['、'{',将当前字符进栈。 情况3:如果当前字符是')'、']'、'}',如果栈顶是和c配对左括号,则栈顶出栈, 否则说明不匹配,flag赋值0,并且结束循环。 最后如果flag为1并且栈中没有元素,说明整个是匹配的,输出“YES”,否则输出“NO”

        ==参考代码==
        #include <iostream>
        #include <string>
        #include <stack>
        
        using namespace std;
        
        char c;
        stack<char> s;
        bool flag = 1;
        
        int main()
        {
            while(true)
            {
                cin >> c;
        
                if (c == '@') break;
        
                if (c == '(' || c == '[' || c == '{')
                {
                    s.push(c);
                }
        
                if (c == ')')
                {
                    if (s.top() == '(')
                        s.pop();
                    else
                    {
                        flag = 0;
                        break;
                    }
                }
        
                if (c == ']')
                {
                    if (s.top() == '[')
                        s.pop();
                    else
                    {
                        flag = 0;
                        break;
                    }
                }
        
                if (c == '}')
                {
                    if (s.top() == '{')
                        s.pop();
                    else
                    {
                        flag = 0;
                        break;
                    }
                }
            }
        
            if (flag == 1 && s.size() == 0)
                cout << "YES";
            else
                cout << "NO";
        
            return 0;
        }
        

        Copy

        点赞再抱走~~~

        • 1

        信息

        ID
        22
        时间
        1000ms
        内存
        256MiB
        难度
        6
        标签
        递交数
        2697
        已通过
        794
        上传者