# Conditional Statements# While Loop# Basic Input/Output

d071 - 格瑞哥里的煩惱 (EOF 版)

🔗 前往 ZeroJudge 原題

題目描述

題目要求判斷給定的年份是否為閏年,並根據格里曆的規則輸出 "a leap year" 或 "a normal year"。輸入為多行年份,以 EOF 結束。

解題思路

這題的核心在於正確實作格里曆的閏年判斷規則。格里曆的閏年規則如下:

  1. 能被 4 整除的年份是閏年。
  2. 但能被 100 整除的年份不是閏年,除非也能被 400 整除。

程式碼使用一個 while 迴圈讀取輸入的年份,並使用條件判斷式來檢查是否符合閏年規則。

複雜度分析

  • 時間複雜度: O(n),其中 n 是輸入的年份數量。因為程式碼需要對每個輸入的年份執行一次常數時間的判斷。
  • 空間複雜度: O(1),程式碼只使用了常數額外的空間來儲存年份和輸出結果。

程式碼

#include <iostream>
using namespace std;
int main(){
	std::ios::sync_with_stdio(false);
    cin.tie(NULL);
	int a;
	while(cin >> a){
		if((a%4==0&&a%100!=0)||a%400==0)
			cout << "a leap year" << endl;
		else
			cout << "a normal year" << endl;
	}
}

Discussion