日期专题:做题笔记 (时间显示/星期计算/星系炸弹/第几天/纪念日)

目录

时间显示

代码

星期计算

代码

星系炸弹

代码

第几天

纪念日

代码


时间显示

时间显示

这道题主要是单位换算。

①单位换算

②输出格式:

a. 不足两位补前导零。利用printf输出

b. 注意 long long 输出格式应该是 %lld 长整型

代码

#include <iostream>
using namespace std;
int main()
{
  long long a;
  cin>>a;
  long long d=a/1000%86400;//余下的是当前这一天的时间:单位是秒
  long long h=d/3600;
  d%=3600;//剩下的是当前这个小时的时间:单位是秒
  long long m=d/60;
  d%=60;
  long long s=d;
  printf("%02lld:%02lld:%02lld",h,m,s);
  return 0;
}

星期计算

星期计算

我们知道直接用20的22次方模上7,看余数是几,用最开始的6加上余数,直接输出结果就行。

但是需要注意的是,20的22次方数太大了。即使使用long long类型也会溢出,导致结果错误。

因此我们在每次*20之后都直接%7,这样对结果是没有影响的。

代码

因为是填空题,直接输出就可以。

#include <iostream>
using namespace std;
int main()
{ 
  /*
  long long a=1;
  for(int i=1;i<=22;i++)
  {
    a*=20;
    a%=7;
  }
  long long c=a%7;
  cout<<c;*/

  cout<<"7";
  return 0;
}

星系炸弹

星系炸弹

注意:

①1月1号放置,定时15天,1号爆炸。因此询问中定时1000天,爆炸的日期输出的应该是第1001天

②判断闰年的两个条件

③if语句比较多,注意一下判断相等是双等号。另一个是括号匹配

④输出格式

代码

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
  int flag=0;
  int cnt=0;
  for(int y=2014;y<2022;y++)
  {
    for(int m=1;m<=12;m++)
    {
      for(int d=1;d<=31;d++)
      {
        if(m==1 ||m==3 ||m==5 ||m==7 ||m==8 ||m==10 ||m==12);
        else if(m==2){
          if(y%400==0 || (y%4==0&& y%100!=0))
          {
            if(d>29)break;
          }
          else {
            if(d>28)break;
          }
        }
        else {
          if(d>30)break;
        }


        if(y==2014 && m==11 && d==9)flag=1;//从该日期进行计数
        if(flag)cnt++;
        if(cnt==1001){
          printf("%d-%02d-%02d",y,m,d);
          return 0;
        }

      }
    }
  }
  return 0;
}

写这道题是为了了解一下这种写法。xx天之后的日期这种,数据可能有点大这种表格不太好做的,都可以用这个模板枚举日期。只是把后面的if判断语句根据题目不同改一下就行。

第几天

第几天

像这个都是同一年的就可以直接用excel做。改一下单元格格式在填充就行。

答案是125

纪念日

(这个没找到原题链接)

这个也是枚举日期,和星系炸弹用一个模板。

这道题要注意的就是:

①分钟。所以把+1天变成加上1天的分钟数即+60*24= +1440 

②注意1923年7月23日12时到2020年7月1日12时,前者那天只有12小时,后者这一天也是只有12小时,但是我们计算的时候把它当完整的一天进行计算,因此最终输出的时候要减去一天即1440分钟

代码

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int flag=0;
    int cnt=0;

    for(int y=1921;y<=2020;y++)
    {
        for(int m=1;m<=12;m++)
        {
            for(int d=1;d<=31;d++)
            {
                if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12);
                else if(m==2)
                {
                    if((y%4==0&&y%100!=0) || y%400==0)
                    {
                        if(d>29)break;
                    }
                    else {
                        if(d>28)break;
                    }
                }
                else {
                    if(d>30)break;
                }
                
                if(y==1921 && m==7 && d==23)flag=1;
                if(flag)cnt+=1440;
                if(y==2020 && m==7 && d==1)
				{
					cout<<cnt-1440;
					return 0;
				}
            }
        }
    }
    return 0;
}

还有个回文日期还没写出来我看难度等级是困难呢,先不写或者分开写吧hh.

有问题欢迎指出,一起加油!!!

上一篇:2024 年最新使用 Wechaty 开源框架搭建部署微信机器人(微信群智能客服案例)-读取联系人信息


下一篇:十个排序算法