这个题目就是有很多小细节需要考虑,如果你是wa呢,恭喜你,既然wa了,那么离ac也不远了。(哈哈哈)
可以试一下这几个特殊样例哦:(如果wa了就去ddbug吧)
1、+ +125 (有可能有多个符号位)
2、+ (没有数字)
3、+ 0125( 开头为0)
4、+ 1 2 (数字中有空格)
然后处理的时候注意开头和结尾的空格就可以啦!
好啦,上代码喽!
#include <stdio.h>
#include <math.h>
#include <string.h>
#define ll __int64;
char s[25]; //用来记录每一个样例
int cnt;//每一个样例字符串的长度
void solve(){
int len=0,len1=0;//len1是用来看是否有多个符号位
int flag1=0,flag=1;//flag1用来标记出现了多久出现了数字
while(s[len]!='\0'){
if(!flag1 && (s[len]==' '||s[len]=='+'||s[len]=='-')){
if(s[len]=='+'||s[len]=='-') len1++;
if(len1>1) flag=0;//有多个符号位就跳出循环哦
} //当没有出现数字时空格和加减号没有严格要求
else{
if(s[len]>='0' && s[len]<='9'){
if(!flag1 && s[len]=='0' && s[len+1]!='\0') flag=0;//当第一个数字是0的时候而且后面还有其他的那么就是不对的
flag1=1;//已经有数字了
}
else flag=0;
}
len++; //往后加一
if(!flag) break;
}
if(flag && flag1) printf("Yes\n"); //符合规则且要有数字
else printf("No\n");
}
int main(){
char c;
while(scanf("%c",&c)!=EOF){
if(c=='\n'){
while((cnt-1) && s[cnt-1]==' ') cnt--;//处理掉结尾的空格
s[cnt]='\0';//用来打标记,也可以用其他的来打标记,只要能知道什么时候遍历结束就可以了哦
solve();//处理这一个字符串
cnt=0;//开启下一个字符串
}
else s[cnt++]=c;
}
return 0;
}
这个题目还可以用gets来输入:
#include <stdio.h>
#include <math.h>
#include <string.h>
#define ll __int64;
char s[25]; //用来记录每一个样例
int cnt;//每一个样例字符串的长度
void solve(){
int len=0,len1=0;//len1是用来看是否有多个符号位
int flag1=0,flag=1;//flag1用来标记出现了多久出现了数字
while(s[len]!='\0'){
if(!flag1 && (s[len]==' '||s[len]=='+'||s[len]=='-')){
if(s[len]=='+'||s[len]=='-') len1++;
if(len1>1) flag=0;//有多个符号位就跳出循环哦
} //当没有出现数字时空格和加减号没有严格要求
else{
if(s[len]>='0' && s[len]<='9'){
if(!flag1 && s[len]=='0' && s[len+1]!='\0') flag=0;//当第一个数字是0的时候而且后面还有其他的那么就是不对的
flag1=1;//已经有数字了
}
else flag=0;
}
len++; //往后加一
if(!flag) break;
}
if(flag && flag1) printf("Yes\n"); //符合规则且要有数字
else printf("No\n");
}
int main(){
while(gets(s)!=NULL){ //为什么用NULL,然后NULL是什么,可以搜一下gets的返回值和什么是NULL
//去掉结尾的空格
int s1=strlen(s);
while(s[s1-1]==' ') s1--;
s[s1]='\0';
solve();
}
return 0;
}
加油哦,我们明天再见!