【CCF-CSP】 201509-2 日期计算 C++


一、题目

在这里插入图片描述

原题目链接

二、解题

1.思路

根据给定的年份和天数计算出对应的月份和日期。下面是它的具体思路:

  1. 定义一个二维整型数组M,其中第一行表示闰年中每个月的天数,第二行表示平年中每个月的天数。
  2. 创建一个函数leap(),用于判断给定的年份是否为闰年。它的具体实现方式是,若该年能被4整除但不能被100整除,或者能被400整除,则判定为闰年,并返回true;否则返回false。
  3. 主函数中,首先从标准输入中读入年份和天数。
  4. 检查该年是否为闰年,并将结果保存在变量y中。
  5. 创建一个变量sum,用于记录天数之和,初始化为0。
  6. 利用循环遍历每个月,判断天数是否已经超过给定的天数。如果是,将该月份保存在变量m中,并退出循环;否则将当前月份天数累加到sum中。
  7. 输出所得到的月份m,以及给定天数与前m-1个月天数之和的差值。

下面使用一个具体的例子说明代码的执行过程。输入年份为2023,天数为75。首先检查该年是否为闰年,发现不是,因此y的值为0。接下来开始遍历每个月,从1月开始,累加天数。1月有31天,sum变为31;2月有28天(因为不是闰年),sum变为59;3月有31天,sum变为90,此时超过了给定天数,因此保存当前月份m为3,并输出3和75-59=16,即3月16日。

2.代码

dev c++ 5.11

#include<iostream>
using namespace std;
int M[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
              {0,31,29,31,30,31,30,31,31,30,31,30,31}};
bool leap(int year){
	return ((year%4==0 && year%100!=0) || year%400==0 );
}
int main(){
	int year,day,sum=0,m;
	cin>>year>>day;
	int y=leap(year);
	for(int i=1;i<13;i++){
		if((sum+M[y][i])>=day){
			m=i;
			break;
		}else{
			sum+=M[y][i];
		}
	}
	cout<<m<<endl<<day-sum<<endl;
	return 0;
	
}




3.提交结果

在这里插入图片描述

总结

月份小技巧

int M[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
              {0,31,29,31,30,31,30,31,31,30,31,30,31}};
bool leap(int year){
	return ((year%4==0 && year%100!=0) || year%400==0 );
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值