河工计院OJ 1115题解

题目描述:

输输入多个测试用例,每个测试用例为一日期,输出该日期是所在年的第几天。

输入:

输入多个测试用例,每个测试用例为一日期,每个测试用例占一行。

输输出:

对每个测试用例输出该日期是所在年的第几天,每个输出占一行。

样样例输入
2021 1 29
样样例输出 
29

原题链接:P1115 - 本年度第几天(函数实现) - HAUE-OJ (haueacm.top)
代码示例:

#include<iostream>

using namespace std;
int a[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,month,day,ans=0;
	while(~scanf("%d %d %d",&year,&month,&day)){
		for(int i=0;i<month;i++){
			ans+=a[leap(year)][i];
		}
		ans+=day;
		cout<<ans<<endl;
	}
	return 0;
}

代码分析:这段代码的巧妙之处在于使用了一个二维数组 a 来存储每个月的天数,而数组的索引通过 leap 函数来确定,该函数用于判断是否为闰年。以下是主要的巧妙之处:

  1. 数组 a 的巧妙使用:

    int a[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}};
    • 通过数组 a,将平年和闰年每个月的天数整合在一起,使得通过索引 a[leap(year)][i] 就可以获得当前年份、月份的天数。这样避免了在代码中使用多个条件语句,使得代码更加简洁。
  2. leap 函数的巧妙设计:

    bool leap(int year) { return year%4==0&&year%100!=0||year%400==0; }
    • 通过一行简短的表达式,判断是否为闰年。这个表达式涵盖了闰年的所有规则,包括能被4整除但不能被100整除,或者能被400整除。这种设计使得代码易读且高效。
  3. 累加天数的处理:

    for(int i=0;i<month;i++){
     ans+=a[leap(year)][i]; 
    } 
    ans+=day;
    • 通过一个简单的 for 循环累加每个月的天数,再加上输入的日,就得到了该日期在该年的天数。这种方式很直观地体现了日期计算的逻辑。

总体来说,这段代码通过巧妙的数组设计和函数使用,实现了日期计算的功能,同时代码结构清晰简洁。有更好方法欢迎评论区留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值