每日编程中遇到任何疑问、意见、建议请公众号留言或加入每日编程群聊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