36 条题解

  • 15
    @ 2023-3-19 22:32:10

    P1007 求日龄

    题目描述

    年龄是指一个人出生后以年为长度计算的时间整数值。

    同理,日龄指一个人出生后以日为长度计算的时间整数值

    请求出给定日期出生的人,到 2022 年 10 月 20 日的日龄吧。


    思路

    需要用到多个函数:

    1.判断闰年

    凡公历中有闰日(2月29日)的年份,阴阳历中有闰月的年份。

    1582年以来公历的置闰规则:

    普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。

    世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。

    1582年以前的惯例:四年一闰;如果公元A年的A(正数)能被4整除,那么它就是闰年;如果公元前B年的B(正数)除以4余1,那么它也是闰年。

    (1)四年一闰百年不闰:即如果year能够被4整除,但是不能被100整除,则year是闰年。 (2)每四百年再一闰:如果year能够被400整除,则year是闰年。

    可以根据这些编出来:

    int leap_year(int n)
    {
        if(n % 400 == 0)
        {
            return true;
        }
        else if(n % 4 == 0 && n % 100 != 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    

    2.判断是第几天函数

    int day_in_year(int y,int m,int d)
    {
        int ans = 0;
        for(int i = 1;i <= m - 1;i++)
        {
            ans += days[i] + (leap_year(y) && i == 2);
        }
        ans += d;
        return ans;
    }
    

    不过这里就需要用一个数组:

    int days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

    把他们穿起来:

    int y,m,d;
        cin >> y >> m >> d;
        int a = day_in_year(y,m,d);
        int b = 293;
        for(int i = y;i < 2022;i++)
        {
            c += 365 + leap_year(i);
        }
        cout << c + b - a;
    

    -搞定!


    参考代码:

    #include <iostream>//hetao3097453
    using namespace std;
    int days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    int c;
    int leap_year(int n)
    {
        if(n % 400 == 0)
        {
            return true;
        }
        else if(n % 4 == 0 && n % 100 != 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    int day_in_year(int y,int m,int d)
    {
        int ans = 0;
        for(int i = 1;i <= m - 1;i++)
        {
            ans += days[i] + (leap_year(y) && i == 2);
        }
        ans += d;
        return ans;
    }
    int main()
    {
        int y,m,d;
        cin >> y >> m >> d;
        int a = day_in_year(y,m,d);
        int b = 293;
        for(int i = y;i < 2022;i++)
        {
            c += 365 + leap_year(i);
        }
        cout << c + b - a;
        return 0;
    }
      
    

    hetao3097453(bililili @ 一钩出站)

    2023年3月19日

信息

ID
1
时间
1000ms
内存
256MiB
难度
6
标签
递交数
5232
已通过
1492
上传者