前言
蓝桥杯全国软件和信息技术专业人才大赛由工业和信息化部人才交流中心主办,每年参赛人数超过30000人。蓝桥杯大赛作为国内领先的全国性 IT 学习赛事,持续有力支撑综合测评、奖学金评定、升学考研,是高等教育教学改革和创新人才培养的重要竞赛项目。那么,从今天起我将逐一从简到难解析各大编程算法题。
题目
年m月d日是哪一年的第几天。 比如y年的1月1日是那一年的第一天,那么2000年7月7日是那一年的第几天。
分析
1、问题是计算一年的某天是第几天,由于闰年的二月是29天,故我们需要判断是闰年
2、闰年的判断规则 四年一润,百年不润,四百又润,也就是说能被400整除,被4整除并不能被100整除的都是闰年
3、月份规则 1、3、5、7、8、10、12是大月,有31天;2月平年是28天,闰年是29天;4、6、9、11是小月,有30天
算法
1、根据年份判断是否闰年闰月,如果为闰月需要设置当前月份为29天
2、从1月一次到目标月份进行天数跌加,如果叠加月份小于目标月份,直接增加循环月份天数即可;如果循环月份就是目标月份,直接增加目标月份目标日期天数。
难度
难度较为简单,星级 ★
实战
该题为蓝桥杯简单试题,我们本次实战用JAVA语言演示。
1、创建算法
创建算法
/**
* 计算当年的第几天
* @param year
* @param month
* @param day
* @author senfel
* @date 2023/4/11 10:53
* @return void
*/
private static int computeDay(int year, int month, int day) {
if (year == 0 || month == 0 || day == 0) {
return 0;
}
//月份规则 1、3、5、7、8、10、12是大月,有31天;2月平年是28天,闰年是29天;4、6、9、11是小月,有30天
//闰年规则 四年一润,百不润,四百又润
//润年2月29天特殊处理,指定月份天数数组
int mothArr[] ={31,28,31,30,31,30,31,31,30,31,30,31};
//总天数
int sum = 0;
//从第一月依次增加天数至目标月份
for(int i=0;i<month;i++){
//当前月份的天数
int days = mothArr[i];
if(i == 1){
//二月判断是否是闰年 索引从0开始故为2月
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){
//闰年二月为29天
days = 29;
}
}
if(i < month -1){
//目标倒数第一月
sum+=days;
}else{
//目标月份
sum+=day;
}
}
return sum;
}
2、创建测试用例
测试用例
@SpringBootTest
class DemoApplicationTests {
/**
* 测试计算当前日期为当年第几天算法
* @author senfel
* @date 2023/4/11 11:29
* @return void
*/
@Test
void computeDay() {
//计算
int sum = DayDemo.computeDay(2023, 12, 31);
System.err.println("2023-12-31是当年第"+sum+"天");
int sum2 = DayDemo.computeDay(2024, 12, 31);
System.err.println("2024-12-31是当年第"+sum2+"天");
int sum3 = DayDemo.computeDay(2000, 7, 7);
System.err.println("2000-07-07是当年第"+sum3+"天");
}
}
3、测试结果
2023-12-31是当年第365天
2024-12-31是当年第366天
2000-07-07是当年第189天
总结
计算当前日期为当年第几天这个试题较为简单,我们只需了解闰年闰月,以及十二月份天数的常识即可。该试题为【蓝桥杯】简单试题,这也可以看出蓝桥杯的试题有很多都很贴近我们生活。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/154639.html