qq_54185425
天诛雷之魂
采纳率0%
2021-02-25 18:43

第二届蓝桥杯试题B:特殊日期

输入一个起始日期和终止日期,例如20181101和20181130这样的8位数,求两个日期中间出现过连续3个数字的日期的个数,其中的数必须满足日期的格式,连续数字例如20181112或20181111,上面是我的源代码,我的问题是为什么20181111这个数在程序里没有识别在内?(正确答案是10个,我程序是9个,没算20181111).

 

#include<stdio.h>
int trial(int num)/*判断是否为合法日期*/
{int mon,day,year,t=1;
 year=num/10000;
 mon=num%10000;
 if(mon<1000) return 0;
 day=mon%100;
 mon=mon/100;
 if(day==0||day>=32||mon<=0||mon>=13) return 0;
 switch(mon)
 {case 4:case 6:case 9:case 11:if(day>30)t=0;break;
  case 2:if(year%4==0&&year%100!=0||year%400==0)
		   {if(day>29)t=0;}
		   else if(day>28)t=0;}
 return t;}
int main()
{int a,b;
 int num=0,i,t=1,j;
 scanf("%d%d",&a,&b);/*输入两个8位数日期,例如20181101 20181130*/
 for(i=a;i<=b;i++)
    {for(j=10;j<=1e7;j*=10)
       if(i/j%10==i/(j/10)%10)
	     {t++;if(t==3)break;}/*问题所在,不知道为什么没算20181111在内*/
	   else t=1;
     if(t==3&&trial(i)==1)num++;}/*满足出现3个连续数及属于合法日期的数会被记录*/
 printf("%d\n",num);/*输出符合条件的数的个数*/
return 0;}

 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

为你推荐