写点什么

算法题每日一练 --- 第 5 天:星系炸弹

作者:知心宝贝
  • 2022 年 7 月 22 日
  • 本文字数:973 字

    阅读完需:约 3 分钟

算法题每日一练---第5天:星系炸弹

一、问题描述

在 X 星系的广袤空间中漂浮着许多 X 星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。


比如:阿尔法炸弹 2015 年 11 月 1 日放置,定时为 1 日放置,定时为 15 天,则它在天,则它在 2015 年年 1 月月 16 日爆炸。


有一个贝塔炸弹,2014 年 11 月 9 日放置,定时为 1000 天,请你计算它爆炸的准确日期。


请输出该日期,格式为 yyyy-mm-dd 即 4 位年份 2 位月份 2 位日期。比如:2015-02-19

二、题目要求

考察

1.日期问题2.建议用时15~25min
复制代码

运行限制

  • 最大运行时间:1s

  • 最大运行内存: 128M

三、问题分析

对于上面的问题,已知当前的时间是 2014 年 11 月 9 日,求解经过 1000 天后,日期是多少天。对于月份来说,我们用一个一维数组提前把 12 个月份的天数存储到数组中,其中 2 月份天数默认成 28 天。


a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//将月份的具体值写入
复制代码


对于年份来说,首先判断是不是闰年,根据闰年规则“四年一闰,百年不闰,四百年一闰”,年份满足下列条件之一,则为闰年。


(1)能被4整除且不能被100整除(如2004年是闰年,而1900年不是)
(2)能被400整除(如2000年是闰年)
复制代码


如果判断出来是闰年,那么 2 月天数变为 29 天,不是闰年,2 月天数 28 天。


对于天数来说,有 1000 天,初始天数为 9 天,当满足月份,月份加一,天数变成一,重新计算。当月份大于 12 月时,需要将年份加一,月份变成一,天数不变。

四、编码实现

#include<iostream>#include<math.h>using namespace std;int main(){  int y=2014,m=11,d=9,i,n=1000;//定义初始变量   int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//将月份的具体值写入   for(i=1;i<=n;i++)  {    d++;//天数+1     if(y%400==0||y%4==0&&y%100!=0)//判断是不是闰年       a[2]=29;//如果是闰年,2月份变成29天,否则不变     else      a[2]=28;    if(m>12)//如果月份大于12     {      y++;//年份+1       m=1;//月份变成1     }    if(d>a[m])    {      m++;//月份加一       d=1;//天数变成一     }  }  cout<<y<<" ";//由于输出格式问题   if(m<10)//判断月份是不是两位数   {    cout<<"0"<<m<<" ";//输出   }  else      cout<<m<<" ";  if(d<10)//判断天数是不是两位数   {    cout<<"0"<<d;//输出   }  else      cout<<d;  return 0;}
复制代码

五、输出结果


发布于: 2 小时前阅读数: 14
用户头像

知心宝贝

关注

公众号:穿越计算机的迷雾 2022.03.07 加入

生于尘埃 溺于人海 死于理想高台

评论

发布
暂无评论
算法题每日一练---第5天:星系炸弹_算法_知心宝贝_InfoQ写作社区