江西财经大学第一届程序设计竞赛 B 大吉大利(年月日题计算)

链接: https://www.nowcoder.com/acm/contest/115/B
来源:牛客网

给出一个出生日期,比如:1999-09-09,
问:从出生那一天开始起,到今天2018-04-21为止(包括出生日期和今天),有多少天,年月日都不包含数字4?

输入描述:

第一行输入一个整数T(表示样例个数)
接下来T组样例
每个样例一行,包含一个字符串“yyyy-mm-dd”(1990<=yyyy<=2018)
题目保证测试数据的正确性

输出描述:

输出题意要求的天数
  
  

输入

1
1999-09-09

输出

5020
一开始自己的方法很容易出现有的内容没有考虑到 这样的题用一个while循环一天天累加外加调用判断函数 这样不容易遗漏情况超时
#include<bits/stdc++.h>
using namespace std;
int day[13]={0,28,25,28,0,28,27,28,28,27,28,27,28};
int run(int x)
{
    int k=x;
    int temp;
    while(k>0)
    {
        temp=k%10;
        k=k/10;
        if(temp==4)
        return 0;
    }
    int ans=0;
    if(x%4==0&&x%100!=0||x%400==0)
    {
        ans=303;   
    }
    else
    ans=302;
    return ans;
}
int main()
{
    int y,m,d;
    while(scanf("%d-%d-%d",&y,&m,&d)!=EOF)
    {
        int i;
        int sum=0;
        for(i=y+1;i<2018;i++)
        {
            sum+=run(i);
        }
        int k=run(y);
        int yday=0;
        for(i=0;i<m;i++)
        yday+=day[i];
        int dday=0;
        if(d<4)
        dday=d;
        else if(d<14)
        dday=d-1;
        else if(d>=14&&d<24)
        dday=d-2;
        else if(d>=24)
        dday=d-3;
        k=k-yday-dday+1;
        sum=sum+k+81;
        printf("%d\n",sum);
    }
    return 0;
}
以后不能写这种头铁的代码了.....
AC代码
#include<bits/stdc++.h>
using namespace std;
int a[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int b[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int year(int y ,int m,int d)
{
	while(y||m||d)
	{
		if(y%10==4||m%10==4||d%10==4)
		return 0;
		y=y/10;
		m=m/10;
		d=d/10;
	}
	return 1;
}
int run(int x)
{
	if(x%400==0||x%4==0&&x%100!=0)
	return 1;
	else 
	return 0;
}
/*
int  cntd(int d)
{
	int dday=0;
	if(d<4)
	dday=d;
	else if(d<14&&d>=4)
	dday=d-1;
	else if(d>=14&&d<24)
	dday=d-2;
	else if(d>=24)
	dday=d-3;
	return dday;
}*/
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int y,m,d;
		scanf("%d-%d-%d",&y,&m,&d);
		int i;
		int sum=0;
		while(1)
		{
			if(y==2018&&m==4&&d>21)
			break;
			sum+=year(y,m,d);
			d++;
			if(run(y))
			{
				if(d>a[m])
				{
					d=1;
					m++;
				}
				if(m>12)
				{
					y++;
					m=1;
				}
			}
			else
			{
				if(d>b[m])
				{
					d=1;
					m++;
				}
				if(m>12)
				{
					y++;
					m=1;
				}
			}
		}
		cout<<sum<<endl;
	}
	return 0;
}



猜你喜欢

转载自blog.csdn.net/qq_40916491/article/details/80034669