第十四届蓝桥杯集训——switch——配套用法示例
示例题目:
计算某年某月某日有多少天?
输入三个变量,变量year代表年份,变量month代表月份,变量day代表当月的天数。
取值范围:1853>=year<=2050;0>month<=12;0>day<=31(大月);0>day<=30(小月);day={28,29}(二月)。
取值范围说明:【1853年格里高利历颁布,1853年前没有平年和闰年之分。】
输入示例1:
1853 12 31
输出示例1:
365
输入示例2:
2020 3 1
输出示例2:
61
为了方便测试,我们先写固定的数据,我们测试数据1,因为计算正确平年肯定是365天。
分析过程:
1、月份与天数是累计的关系,大月31天,小月30天,二月份闰年29天、平年28天。
2、判断如年平年
3、使用switch进行倒序累计,有对应的月份向1月份进行累计,最后累加当月日期。
4、根据输入范围确定,可以去掉switch的default进行计算,不会出现月份异常。
package com.item.action; public class Main { public static void main(String args[]) { // 年份用于判断是否闰年 int year = 1983; // 月份用于累加月份天数 int month = 12; // 日期用于最终天数 int day = 31; // 数量用于累计 int count = 0; // 通过月份进行检索 switch (month) { case 12: count += 30; case 11: count += 31; case 10: count += 30; case 9: count += 31; case 8: count += 31; case 7: count += 30; case 6: count += 31; case 5: count += 30; case 4: count += 31; case 3: // 判断闰年与否 if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { count += 29; } else { count += 28; } case 2: // 二月份开始累计1月份天数 count += 31; case 1: // 累计最后一天 count += day; // 计算到最后一个月份就停止。 break; } // 输出结果 System.out.println(count); } }
输出效果:
使用扫描器输入变量效果:
package com.item.action; import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); // 年份用于判断是否闰年 int year = sc.nextInt(); // 月份用于累加月份天数 int month = sc.nextInt(); // 日期用于最终天数 int day = sc.nextInt(); sc.close(); // 数量用于累计 int count = 0; // 通过月份进行检索 switch (month) { case 12: count += 30; case 11: count += 31; case 10: count += 30; case 9: count += 31; case 8: count += 31; case 7: count += 30; case 6: count += 31; case 5: count += 30; case 4: count += 31; case 3: // 判断闰年与否 if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { count += 29; } else { count += 28; } case 2: // 二月份开始累计1月份天数 count += 31; case 1: // 累计最后一天 count += day; // 计算到最后一个月份就停止。 break; } // 输出结果 System.out.println(count); } }
这种switch用法还是比较有效的,这算是一种结构使用的技巧,为后续我们自行探解解题技巧提供了一定的思维方向。