【每日编程-369期】西北工业大学上机题(三)

教育   2024-11-28 10:01   广西  

西北工业大学上机题(三)


每日编程中遇到任何疑问、意见、建议请公众号留言或加入每日编程群聊739635399



括号匹配,输入测试数目n,接着n行输入n组样例(考过多次),假设只包含小括号和中括号。

输入格式:

准备判断表达式的个数

输入包含小括号或者中括号的括号表达式(其中可有其它符号)

输出格式:

可以匹配输出yes否则no

输入样例:

2
([3])
([[[)

输出样例:

yes
no


解决方法:

(1)算法的基本思想:

直接匹配左括号与右括号是否同时出现以及出现的数量是否一致

(2)代码实现:

#include <iostream>
#include <string>
using namespace std;
#define MAX_SIZE 1000
void check(int T)
{
    char str[MAX_SIZE];
    while (T--)
    {
        int flag = 1;
        //统计小括号和中括号的数量
        int fz = 0, fy = 0, yz = 0, yy = 0;
        cin >> str;
        int len = strlen(str);
        for (int i = 0; i < len; ++i)
        {
            switch (str[i])
            {
            case '[':
                fz++;
                break;
            case ']':
                fy++;
                break;
            case '(':
                yz++;
                break;
            case ')':
                yy++;
                break;
            }
            if (i == 0)
                continue;
            //当括号为 ( 或者为 ] 时判断其合法性
            if (str[i] == ']' && str[i - 1] == '(')
            {
                flag = 0;
                break;
            }
            else if (str[i] == ')' && str[i - 1] == '[')
            {
                flag = 0;
                break;
            }
        }
        if (fz != fy || yz != yy) //若括号数量不匹配,则不合法
            flag = 0;
        if (flag == 1)
            printf("Yes\n");
        else
            printf("No\n");
    }
}
int main()
{
    int t = 0;
    cin >> t;
    check(t);
    system("pause");
    return 0;
}

明日预告:中科大上机题(一)

最大公约数:输入n个数,求出这n个数的最小值,最大值以及他们的最大公约数。

输入格式:

第一行输入n

输入n个数(以空格隔开)

输出格式:

最小值    最大值    最大公约数

输入样例:

3
4 6 8

输出样例:

4 8 4


灰灰考研
最全的【计算机考研】【软件考研】考研信息! 最丰富的共享资料! 最大程度上帮助学渣狗登上研究生大门!
 最新文章