# Conditional Statements# Modular Arithmetic# Input Processing

d047 - 10070 - Leap Year or Not Leap Year and ...

🔗 前往 ZeroJudge 原題

題目描述

題目要求判斷給定的年份是否為閏年、Huluculu 節慶年、Bulukulu 節慶年,並按照特定順序輸出對應的訊息。如果年份既不是閏年也不是節慶年,則輸出 "This is an ordinary year."。輸入以 EOF 結束,且年份大於等於 2000。

解題思路

程式碼逐個字元讀取輸入。如果讀取到數字字元,則將其轉換為整數並累積到 b 變數中,並對 330000 取模。如果讀取到非數字字元,則根據 b 的值判斷年份的特性。首先檢查是否為閏年,然後檢查是否為 Huluculu 節慶年,最後檢查是否為 Bulukulu 節慶年。根據判斷結果,按照閏年 -> Huluculu -> Bulukulu 的順序輸出訊息。如果沒有任何特性,則輸出 "This is an ordinary year."。每次處理完一個年份後,輸出一個空行。

複雜度分析

  • 時間複雜度: O(N),其中 N 是輸入字串的長度。因為程式碼需要讀取並處理每個輸入字元。
  • 空間複雜度: O(1),程式碼只使用了幾個整數變數和字元變數,空間使用不隨輸入大小變化。

程式碼

#include <stdio.h>
int main(){
	char a;
	int b=0;
	while(a=getchar()){
		if(a==-1)break;
		if(a>='0'){
			b*=10;
			b+=a-'0';
			b%=330000;
		}
		else{
			char c=0;
			char d=0;
			if((b%4==0&&b%100!=0)||b%400==0){
				printf("This is leap year.\n");
				c=1;
				d=1;
			}
			if(b%15==0){
				printf("This is huluculu festival year.\n");
				c=1;
			}
			if(b%55==0&&d==1){
				printf("This is bulukulu festival year.\n");
				c=1;
			}
			if(c==0)
				printf("This is an ordinary year.\n");
			b=0;
			printf("\n");
		}
	}
}

Discussion