大吉大利

传送门:https://ac.nowcoder.com/acm/contest/115/B

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

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

 

输入描述:

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

输出描述:

输出题意要求的天数

示例1

输入

1
1999-09-09

输出

5020

判断是否累加要每次循环开始就判断,否则会丢失第一天,第一天要另外判断

ac:

#include<bits/stdc++.h>
using namespace std;
int x[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int main()
{
    int a,b,c;
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int cut=0;
        scanf("%d-%d-%d",&a,&b,&c);
        while(1)
        {
            if(a%10!=4&&b!=4&&c%10!=4)
                cut++;
            if(a==2018&&b==4&&c==21)
                break;
            if((a%4==0&&a%100!=0)||a%400==0)
                x[2]=29;
            else x[2]=28;
            c++;
            if(c>x[b])
            {
                c=1;
                b++;
                if(b>12)
                {
                    b=1;
                    a++;
                }
            }
        }
        printf("%d\n",cut);
    }
    return 0;
}

我的习惯是放后面判断,对于这种题,容易少考虑条件

放后面判断:

#include<bits/stdc++.h>
using namespace std;
int x[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
 
int main()
{
    int a,b,c;
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int cut=1;
        scanf("%d-%d-%d",&a,&b,&c);
        if(a%10==4||b==4||c%10==4)
            cut--;
        while(1)
        {
            if(a==2018&&b==4&&c==21)
                break;
            if((a%4==0&&a%100!=0)||a%400==0)
                x[2]=29;
            else x[2]=28;
            c++;
            if(c>x[b])
            {
                c=1;
                b++;
                if(b>12)
                {
                    b=1;
                    a++;
                }
            }
            if(a%10!=4&&b!=4&&c%10!=4)
                cut++;
        }
        printf("%d\n",cut);
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/wangtao971115/p/10358210.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值