目录
时间显示
代码
星期计算
代码
星系炸弹
代码
第几天
纪念日
代码
时间显示
时间显示
这道题主要是单位换算。
①单位换算
②输出格式:
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.
有问题欢迎指出,一起加油!!!