相会日期

关于日期的操作

康康、聪聪和欢欢三个同学都定期去“爱心”福利院做义工,康康每a天去一次、聪聪每b天去一次、欢欢每c天去一次。2014年5月1日他们同聚“爱心”福利院,过了一个非常有意义的“五一”劳动节。问:下一次他们再相聚“爱心”福利院,将是哪年几月几日?

【输入】a b c (0 < a < 100,0 < b < 100,0 < c < 100 )

【输出】再相聚的年、月、日 (以1个空格相隔)

【样例】:

输入:1 2 3

输出:2014 5 7

考察点:

1、求三个数的最小公倍数

2、从现在开始,一段时间后的具体日期是多少。

代码:

#include <iostream>
#include <cmath>
#include <cstdio> 
using namespace std;

int getMax(int a, int b, int c)
{
    int ans = a;
    if(ans < b)
        ans = b;
    if(ans < c)
        ans = c;
    return ans;
}

int main()
{
    int a, b, c, t, maxn;
    int i = 1;
    int m1[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int m2[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    cin >> a >> b >> c;
    maxn = getMax(a, b, c);
    while(true){
        t = maxn * i;
        if(t%a==0&&t%b==0&&t%c==0)
            break;
        i++;
    }
    int y = 2014, m = 5, d = 1;
    while(t >= 366)
    {
        y++;
        if((y%4==0&&y%100!=0)||(y%400==0)){
            t = t - 366; 
        }
        else{
            t = t - 365;
        }
    }
    if(t == 365){
        t = t - 365;
        y++;
    }

    if(((y+1)%4==0&&(y+1)%100!=0)||((y+1)%400==0)){
        while(t > m2[m] - 1){
            t = t - m2[m];
            if(m==12)
                m = 1;
            else
                m = m + 1;
        }
        d = d + t;
    }
    else{
        while(t > m1[m] - 1){
            t = t - m1[m];
            if(m==12)
                m = 1;
            else
                m = m + 1;
        }
        d = d + t;
    }
    if(m < 5){
        y++;
    }
    cout << y << " " << m << " " << d << endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值