解题思路:说好的输入"End of file"结束,弄的我交了好几遍都是超出限制。


       其实还是~Z结束。
注意事项:
    学多点函数才是解题的好帮手。

    函数sscanf()和scanf()类似, 只是输入从buffer(缓冲区)中读取。

    例如scanf输入x[100],用sscanf就可以读取x[100]的内容


 #include <stdio.h>

 #include <string.h>

 #define p(n) (n>=0 && n<=255)       //定义带参数的宏

 int main()

 {

      char x[1000];

      int a,b,c,d;

      while(gets(x)!='\0')      //这里面和scanf("%s",x)!=EOF是一个原理。

      {

         if(sscanf(x,"%d.%d.%d.%d",&a,&b,&c,&d)==4)      

                           //判断格式,例如 ?.1.2.3 返回0:  1.?.2.3 返回1;  1.2.3.4 返回4;

          printf("%c\n",(p(a) && p(b) && p(c) && p(d))?'Y':'N');      

                           //条件运算符 ? : 例如 1<2?1:2 条件成立选前面就是1,条件不成立就选后面就是2。  

             

           else 

          printf("%c\n",'N');

      }

 }


点赞(5)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 3 条评论

君应怜 5年前 回复TA
@为jun木而生 还是有漏洞,没法判断前导0
为jun木而生 5年前 回复TA
我在DVC上测试发现还是有漏洞的,比如:2.2.2.2.
改了下
 #include <stdio.h>
 #include <string.h>
 #define p(n) (n>=0 && n<=255) 
 int fun(char a[])
 {
     char *p=a;
     int i=0;
     while(*p)
     {
     	if(*p=='.')i++;
	    p++;
	 }
	 if(i==3)return 0;
	 return 1;
 }
 int main()
 {
 	    char x[1000];
     	int a,b,c,d;
     	while(scanf("%s",x)!=EOF) 
 	    {   
		    if(fun(x))printf("N\n");
        	else if(sscanf(x,"%d.%d.%d.%d",&a,&b,&c,&d)==4)      
            printf("%c\n",(p(a)&&p(b)&&p(c)&&p(d))?'Y':'N');      
           else printf("N\n");
      }
      return 0; 
 }
叮咚叮咚 5年前 回复TA
厉害了,学到了