题目链接

四季

题目描述

根据气象学定义,季节划分如下:

  • 春季 (spring): 3, 4, 5 月
  • 夏季 (summer): 6, 7, 8 月
  • 秋季 (autumn): 9, 10, 11 月
  • 冬季 (winter): 12, 1, 2 月

给定一个 YYYYMM 格式的六位整数,请输出其对应的季节。

输入描述: 输入一个六位整数 YYYYMM,表示年份和月份。

输出描述: 输出对应的季节英文名称(全小写)。

解题思路

本题的核心是从输入的六位数中提取出月份信息,然后根据月份所在的区间进行判断。

  1. 提取月份:输入的格式是 YYYYMM。年份信息 YYYY 在这里是无用的,我们只关心月份 MM。可以通过对输入的整数模 100 (% 100) 来直接提取出最后两位,即月份。
  2. 区间判断:得到月份后,使用 if-else if-else 结构或 switch-case 结构来判断它属于哪个季节的区间。
    • 春季: 月份在 3 到 5 之间 (month >= 3 && month <= 5)
    • 夏季: 月份在 6 到 8 之间 (month >= 6 && month <= 8)
    • 秋季: 月份在 9 到 11 之间 (month >= 9 && month <= 11)
    • 冬季: 剩下的情况(12, 1, 2 月)。可以把这个作为 else 分支,因为它是所有其他情况的补集。

代码

#include <iostream>

using namespace std;

int main() {
    int yyyymm;
    cin >> yyyymm;
    
    // 通过模100运算提取月份
    int month = yyyymm % 100;
    
    if (month >= 3 && month <= 5) {
        cout << "spring" << endl;
    } else if (month >= 6 && month <= 8) {
        cout << "summer" << endl;
    } else if (month >= 9 && month <= 11) {
        cout << "autumn" << endl;
    } else {
        cout << "winter" << endl;
    }
    
    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int yyyymm = sc.nextInt();
        
        // 通过模100运算提取月份
        int month = yyyymm % 100;
        
        if (month >= 3 && month <= 5) {
            System.out.println("spring");
        } else if (month >= 6 && month <= 8) {
            System.out.println("summer");
        } else if (month >= 9 && month <= 11) {
            System.out.println("autumn");
        } else {
            System.out.println("winter");
        }
    }
}
yyyymm = int(input())

# 通过模100运算提取月份
month = yyyymm % 100

if 3 <= month <= 5:
    print("spring")
elif 6 <= month <= 8:
    print("summer")
elif 9 <= month <= 11:
    print("autumn")
else:
    print("winter")

算法及复杂度

  • 算法:算术运算与区间判断。
  • 时间复杂度: - 这是一个固定的计算和判断流程。
  • 空间复杂度: - 仅需常数空间存储变量。