B题:纪念日
问题描述:
2020 年 7 月 1 日是中国某党成立 99 周年纪念日。
中国某党成立于 1921 年 7 月 23 日。
请问从 1921 年 7 月 23 日中午 12 时到 2020 年 7 月 1 日中午 12 时一共含多少分钟?
思路:
①可以用电脑自带的计算器计算
②根据思路写代码,以1900年1月1日为基准,计算这两个日期到1900年的差,的绝对值
代码:
#include <stdio.h>
#include <stdlib.h>
bool isLeapYear(int year)
{
return ((year%4==0 && year%100!=0) || year%400==0);//判断闰年
}
int getDays(int y, int m, int d)
{
int md[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(y))
md[2]++;//相应月的天数,的二月,加一天
int count = 0;
for(int i = 1900;i < y;i++)//以1900年1月1日为基准
{
count += 365;
if(isLeapYear(i))
count ++;
}
for(int i = 1;i < m;i++)//以1900年1月1日为基准
{
count += md[i];
}
count += d;//以1900年1月1日为基准
return count;
}
int dayDistance (int year1, int month1, int day1,int year2, int month2, int day2)
{
return abs(getDays(year2, month2, day2) - getDays(year1, month1, day1));
}
int main()
{
printf("%d\n",dayDistance(2020, 7, 1, 1921, 7, 23));
return 0;
}
相似题型——纪念日计算
问题描述:
一对情侣,想知道第他们的第 100 天,200 天 …的纪念日。
输入格式:
输入 4 个整数 y,m,d,k,表示他们在一起的日期,保证是一个 1900 年 1 月 1 日以后的日期,想知道他们的 k(0≤k≤10000) 天纪念日。
输出格式:
输出格式按照yyyy-mm-dd的格式输出 k天纪念日的日期。月份和天数必须各输出 2位。保证最后答案年份不超过4位。
用例:
思路:
1、先判断输入的年份是否为闰年,从而修改当前2月的天数。
2、每算一天,当前日自增一天。直到算的日期超过了规定的天数。
代码:
#include <stdio.h>
int day[13] = {0, 31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
int y, m ,d, k;
scanf("%d%d%d%d",&y,&m,&d,&k);
for(int i =1; i<= k; i++){
if((y % 100 != 0 && y % 4 == 0 ) || (y % 400 == 0)){
day[2] = 29;
}else{
day[2] = 28;
}
d++;
if(d == day[m] + 1){//如果当前月的天数达到最大,修改成下一个月,日重置为1
d =1;
m++;
}
if(m ==13){//如果当前月的天数达到最大,修改成下一个年,月重置为1
m =1;
y++;
}
}
printf("%04d-%02d-%02d\n",y,m,d);
return 0;
}