2020年7月蓝桥杯初赛 C++B组(学习笔记2)

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;
}

未完待续……

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓梦林

都看到这里了,支持一下作者呗~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值