2018年东莞市信息特长生考试
T1·密码问题
Description
给一个四位数,然后重组两次,重组后不一定要四位数,求两数之差且需最大
Sample Input
4386
Sample Output
5175
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int A[15], Max, Min;
char c;
int main()
{
for(int i = 1; i <= 4; i++)
cin >> c, A[i] = c - '0';
sort(A + 1, A + 4 + 1);
for(int i = 1; i <= 4; ++i)
Min = Min * 10 + A[i];
for(int i = 4; i >= 1; --i)
Max = Max * 10 + A[i];
printf("%d", Max - Min);
return 0;
}
T2·括号匹配问题
一个包含’{’,’}’,’(’,’)’,’[’,’]'的字符串,给定:
{}里可以嵌套{},(),[]
[]里可以嵌套[],()
()里可以嵌套()
且每个括号都是两两匹配
若符号则输出“YES”,否则输出“NO”
Sample Input
6
{[() ]()[() ]}
()() [()]{[()]}
([])
[(()(]
()[()]
{()()[ ] }
Sample Output
YES
YES
NO
NO
YES
YES
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int A[15];
string s;
int T, F;
int main()
{
scanf("%d\n", &T);
while(T--)
{
getline(cin, s);
memset(A, 0, sizeof(A));
F = 0;
for(int i = 0; i < s.length(); ++i)
{
if(s[i] == '{')
{
if(!(!A[2] && !A[1])){
F = 1;break;}else A[3]++;}
else if(s[i] == '}')
{
if(!(A[3] && !A[2] && !A[1])){
F = 1;break;}else A[3]--;}
else if(s[i] == '[')
{
if(!(!A[1])){
F = 1;break;}else A