# Lookup Table# Constant Time

f427 - 高雄市109年資訊競賽國中組第五題

🔗 前往 ZeroJudge 原題

題目描述

題目要求讀取兩個字元,並根據這兩個字元的組合,輸出一個特定的字元。輸入的兩個字元代表一個數字,第一個字元是十位數,第二個字元是個位數。題目實際上是一個查表問題,輸入的數字對應到一個預先定義好的輸出字元。

解題思路

這道題的解題思路非常簡單,題目給定的輸入範圍很小,可以直接使用查表法。程式碼中 ans 陣列儲存了所有可能的輸入對應的輸出字元。程式碼讀取兩個字元,將它們轉換為一個整數索引,然後使用這個索引從 ans 陣列中獲取對應的輸出字元。getchar_unlockedputchar_unlocked 函數用於提高輸入輸出的效率,避免緩衝區同步。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#include <stdio.h>
char ans[16]={'3','1','4','1','5','9','2','6','5','3','5','8','9','7','9','3'};
int main(){
	char a=getchar_unlocked(),b=getchar_unlocked();
	(a=='1'&&b>='0')?a=10+b-48:a-=48;
	putchar_unlocked(ans[a]);
}

Discussion