蓝桥杯练习题-特殊日期
问题描述:
对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。
请问1900年1月1日至9999年12月31日总共有多少天?年份的数位数字之和等于月的数位数字之和加日的数位之和
例如:2022年11月13日满足要求:2+0+2+2=(1+1)+(1+3)
请提交满足条件的日期总数量。
实现思路:
初始化两个LocalDate对象,分别代表开始日期(1990年1月1日)和结束日期(9999年12月31日)。
初始化一个计数器counter,用于统计满足条件的日期数量。
使用while循环遍历开始日期到结束日期之间的所有日期。
对于每个日期,分别获取其年份、月份和日期,并计算它们的各位数之和。
如果年份的各位数之和等于月份和日期的各位数之和,则计数器counter加1。
日期递增1天,继续下一个日期的判断。
当遍历完所有日期后,输出满足条件的日期数量。
代码实现:
方式1:
package com.ztt.Demo01;import java.time.LocalDate;public class demo03 {public static void main(String[] args) {LocalDate beginDate=LocalDate.of(1990, 1, 1);LocalDate endDate=LocalDate.of(9999, 12, 31);int counter=0;while(beginDate.compareTo(endDate)<=0) {int year=beginDate.getYear();int month=beginDate.getMonthValue();int day=beginDate.getDayOfMonth();if(sum(year)==sum(month)+sum(day)) {counter++;}//递增1天beginDate=beginDate.plusDays(1);}System.out.println(counter);}//计算整数的每一位之和private static int sum(int number) {int a=0,b=0,c=0,d=0;d=number % 10;//个位c=(c=number / 10 % 10)!=0?c:0;b=(c=number / 100 % 10)!=0?c:0;a=(c=number / 1000 % 10)!=0?c:0;return a+b+c+d;}}
输出结果:
49776
方式2:
package com.ztt.Demo01;public class Day{public int day1(int a) {switch(a) {case 1:;case 3:;case 5:;case 7:;case 8:;case 10:;case 12:return 31;case 2:return 28;default: return 30;}
}public int day2(int a) {switch(a) {case 1:;case 3:;case 5:;case 7:;case 8:;case 10:;case 12:return 31;case 2:return 29;default: return 30;}}public static void main(String[] args) {Day Day = new Day();int i,j,k,sum=0,DaySum=0;for(i=1990;i<=9999;i++) { for(j=1;j<13;j++) {// System.out.print(j+" ");if((i%4==0&&i%100!=0)||(i%100==0&&i%400==0)){for(k=1;k<=Day.day2(j);k++) { if((i/1000+(i/100)%10+(i/10)%10+i%10) == (j/10+j%10+k/10+k%10)) {System.out.println(i+"年"+j+"月"+k+"日"); DaySum++;}sum++;}}else {for(k=1;k<=Day.day1(j);k++) { if((i/1000+(i/100)%10+(i/10)%10+i%10) == (j/10+j%10+k/10+k%10)) {System.out.println(i+"年"+j+"月"+k+"日");DaySum++;}sum++;}}}}System.out.println("一共有:"+sum+"天");System.out.print("符合要求的有:"+DaySum+"天");}}
输出结果:
一共有:2925592天
符合要求的有:70183天