目录
第一题:特殊日期
问题描述
对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 19001900 年 11 月 11 日至 99999999 年 1212 月 3131 日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。
例如,20222022 年 1111 月 1313 日满足要求,因为 2+0+2+2=(1+1)+(1+3)2+0+2+2=(1+1)+(1+3) 。
请提交满足条件的日期的总数量。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
题目分析
判断闰年+位运算+字符串转整数
题目代码
/** * @author 小卢先冲 * @date 2023/3/21 23:45 */ public class 特殊日期 { public static void main(String[] args) { int[] rn = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int[] pn = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int m = 1; int day = 1; int count = 0; for (int year = 1900; year < 10000; year++) { String syear = year + ""; //计算年位和 int sumyear = 0;//每次统计新的年月日都要把位和赋0 for (int i = 0; i < syear.length(); i++) { sumyear += Integer.parseInt(syear.charAt(i) + ""); } if (isRunnian(year)) {//判断是否为闰年 for (m = 1; m <= 12; m++) { String sm = m + ""; //计算月位和 int summ = 0; for (int i = 0; i < sm.length(); i++) { summ += Integer.parseInt(sm.charAt(i) + ""); } for (day = 1; day <= rn[m]; day++) { String sdata = day + ""; int sumday = 0; //计算日位和 for (int i = 0; i < sdata.length(); i++) { sumday += Integer.parseInt(sdata.charAt(i) + ""); } if (sumyear == sumday + summ) { count++; } } } } else { for (m = 1; m <= 12; m++) { String sm = m + ""; //计算月位和 int summ = 0; for (int i = 0; i < sm.length(); i++) { summ += Integer.parseInt(sm.charAt(i) + ""); } for (day = 1; day <= pn[m]; day++) { String sdata = day + ""; int sumday = 0; //计算日位和 for (int i = 0; i < sdata.length(); i++) { sumday += Integer.parseInt(sdata.charAt(i) + ""); } if (sumyear == sumday + summ) { count++; } } } } } System.out.println(count); } public static Boolean isRunnian(int year) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { return true; } return false; } }
第二题:重合次数
问题描述
在同一天中, 从上午 6 点 13 分 22 秒到下午 14 点 36 分 20 秒, 钟表上的 分针和秒针一共重合了多少次?
注意时针、分针、秒针都围绕中心敳匀速运动。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
题目分析
对日期的处理
s++要写在if(s==m)前面
题目代码
public class 重合次数 { public static void main(String[] args) { int h = 6; int m = 13; int s = 22; int count = 0; while (true) { if (h == 14 && m == 36 && s == 20) { System.out.println(count); break; } s++; if (m == s) count++; if (s == 60) { m++; s = 0; if (m == 60) { h++; m = 0; } } } } }