a003 - 兩光法師占卜術
題目描述
本題要求根據輸入的月份 M 和日期 D,使用一個簡單的公式來計算一個運勢值 S。公式為 S = (M*2 + D) % 3。根據 S 的值,輸出對應的運勢結果:當 S 為 0 時輸出「普通」,當 S 為 1 時輸出「吉」,當 S 為 2 時輸出「大吉」。程式需能處理多組輸入直到輸入結束。
解題思路
這是一道直接實作題,核心是將題目給定的公式準確地轉換為程式碼。
- 讀取輸入: 使用
while(cin >> M >> D)循環,持續讀取月份M和日期D,直到沒有更多輸入。 - 計算運勢值: 根據題目給定的公式
S = (M*2 + D) % 3計算出S的值。 - 判斷並輸出: 使用條件判斷語句(例如
if-else if-else或多個if語句),根據S的值來輸出相對應的運勢字串:「普通」、「吉」或「大吉」。由於S的值只可能為 0, 1, 2,因此直接對這三種情況進行判斷即可。
此方法直接、高效,完全符合題目要求。
複雜度分析
- 時間複雜度: O(1)
對於每一組輸入的
M和D,程式只執行固定次數的算術運算(乘法、加法、取模)和條件判斷,以及一次輸出操作。這些都是常數時間的操作,因此處理每組輸入的時間複雜度為 O(1)。若考慮整個程式執行過程處理 N 組輸入,則總時間複雜度為 O(N)。 - 空間複雜度: O(1)
程式僅使用了固定數量的變數來儲存輸入值
M、D和中間計算結果,不論輸入資料量多大,所需的記憶體空間都保持不變。
程式碼
#include <iostream>
using namespace std;
int main (){
int M;
int D;
while(cin >> M >> D){
if((M*2+D)%3==0){
cout << "普通" << endl;
}
if((M*2+D)%3==1){
cout << "吉" << endl;
}
if((M*2+D)%3==2){
cout << "大吉" << endl;
}
}
}