# String# Conditional Statements# Input/Output

e283 - APCS 類似題 - 小崴的特殊編碼

🔗 前往 ZeroJudge 原題

題目描述

題目要求將經過特殊編碼的二元序列轉換回原始字元 (A~F)。輸入包含多組測試資料,每組資料首先輸入一個整數 N,代表接下來有 N 行二元序列。程式需要讀取這些二元序列,並根據題目提供的對照表,輸出對應的原始字串。

解題思路

題目給定了二元序列與字元的對應關係,因此解題思路是:

  1. 讀取每組測試資料的 N 值。
  2. 迴圈 N 次,每次讀取一個二元序列。
  3. 根據二元序列,判斷對應的字元,並輸出。
  4. 處理多組測試資料,直到輸入結束 (EOF)。 程式碼中使用了大量的 if-else 條件判斷,直接對應題目中給定的編碼表。

複雜度分析

  • 時間複雜度: O(N * M),其中 N 是輸入的字串數量,M 是每個字串的長度 (固定為 4)。由於 M 是常數,因此可以簡化為 O(N)。
  • 空間複雜度: O(1),程式只使用了固定大小的變數,沒有使用額外的資料結構來儲存輸入資料。

程式碼

#include <iostream>
#include <string>
using namespace std;
int main(){
	std::ios::sync_with_stdio(false);
    cin.tie(NULL);
	int a;
	while(cin >> a){
		for(;a>0;a--){
			char c[4];
			for(int i=0;i<4;i++)
				cin >> c[i];
			if(c[0]=='0'&&c[0]==c[2]&&c[1]=='1'&&c[1]==c[3])
				cout << 'A';
			else if(c[0]=='0'&&c[0]!=c[2]&&c[1]=='1'&&c[1]==c[3])
				cout << 'B';
			else if(c[0]=='0'&&c[0]!=c[2]&&c[1]=='0'&&c[1]==c[3])
				cout << 'C';
			else if(c[0]=='1'&&c[0]!=c[2]&&c[1]=='1'&&c[1]==c[3])
				cout << 'D';
			else if(c[0]=='1'&&c[1]==c[2]&&c[2]==c[3]&&c[3]=='0')
				cout << 'E';
			else if(c[0]=='1'&&c[0]==c[1]&&c[2]=='0'&&c[2]==c[3])
				cout << 'F';
		}
		cout << endl;
	}
}

Discussion