第十四届蓝桥杯集训——switch——配套用法示例

简介: 第十四届蓝桥杯集训——switch——配套用法示例

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

相关文章
|
9月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
128 0
|
9月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1007 印章
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1007 印章
81 0
|
9月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1006 拿金币
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1006 拿金币
86 0
|
9月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1004 无聊的逗
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1004 无聊的逗
109 0
|
9月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-992 士兵杀敌(二)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-992 士兵杀敌(二)
120 1
|
9月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
98 0
|
9月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
110 0
|
9月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-997 粘木棍
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-997 粘木棍
112 0
|
9月前
|
机器学习/深度学习 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-996 车的放置
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-996 车的放置
110 0
|
9月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-986 藏匿的刺客
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-986 藏匿的刺客
114 0