第十四届蓝桥杯集训——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用法还是比较有效的,这算是一种结构使用的技巧,为后续我们自行探解解题技巧提供了一定的思维方向。