Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 12147 Accepted Submission(s): 3502
Problem Description
来自世界各地的年青人在 https://2050.org.cn 握手团聚, 他们是航空航天的新生代,编程大赛的优胜者,35岁以下的创新者,科技公司的创始人,展望未来的科学家,天马行空的艺术家...... TA们期待在这里与所有人分享交流,给彼此灵感,给未来答案。
我们想要用10个题目,大声喊出年青人的声音。我们希望和大家一起用技术创造一个更好的2050。
第一道题目,我们来玩一个数字游戏。
给出一个数字 n,我们想知道 n 是不是若干个 2050 依次拼接起来的。
Input
第一行一个正整数 T (T≤10) 表示数据组数。
对于每组数据,一行一个正整数 n (1≤n≤10100000)。
Output
对于每组数据,Yes 表示 n 是若干个 2050 依次拼接起来的,No 表示不是。
Sample Input
2
2050
205020
Sample Output
Yes
No
挨个判断就行,需要判断每个是否是对应的数字,再判断一下长度是否为四的倍数;
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
char bok[4]={'3','2','8','4'}; //此数组代表2,0,5,0分别加上对应的第几位,2+1,0+2,5+3,0+4
int main(){
int t;
scanf("%d",&t);
getchar(); //吸收回车
while(t--){
int len=0,bj=1,bi1=0;
while(1){
len++; //标记长度,用来判断输入的字符串长度是否为四的倍数
char str1=getchar();
if(str1=='\n'||str1=='\r'){
if(len==1&&bj==1){
cout<<"Yes"<<endl;
len=0;
bj=1;
}else{
cout<<"No"<<endl;
len=0;
bj=1;
}
break;
}
if(bj==0){ //bi1代表字符串是否已经出现错误,其值若为0代表已经出先现错误,1为未出现错误
continue;
}
if((str1+len)!=bok[len-1]){ //判断此数位上的数是否正确
bj=0;
}
if(len==4){ //若len等于四,更新为0
len=0;
}
}
}
return 0;
}