# String# Iteration# Conditional Statements

e940 - pA. 猜單字遊戲

🔗 前往 ZeroJudge 原題

題目描述

題目要求模擬一個猜單字遊戲。給定一個答案字串和一系列猜測字母,每次猜測後,輸出當前猜測的結果,其中猜中的字母顯示出來,未猜中的字母顯示為星號。

解題思路

程式首先讀取答案字串 a 和猜測次數 b。使用一個布林陣列 c 來記錄每個字母是否已被猜中。然後,程式迴圈 b 次,每次讀取一個猜測字母 d。在每次迴圈中,程式遍歷答案字串 a,如果字母 a[i] 等於猜測字母 d,則將 c[i] 設置為 true,表示猜中。最後,程式輸出當前猜測的結果,如果 c[i]true,則輸出 a[i],否則輸出星號 *。迴圈結束後,再次輸出最終的猜測結果。

複雜度分析

  • 時間複雜度: O(n*m),其中 n 是猜測次數,m 是答案字串的長度。
  • 空間複雜度: O(m),其中 m 是答案字串的長度,用於儲存布林陣列 c

程式碼

#include <iostream>
#include <string>
using namespace std;
int main(){
	cin.tie(0); ios::sync_with_stdio(false);
	string a;
	cin >> a;
	int b,al=a.length();
	bool c[al];
	for(int i=0;i<al;i++)
		c[i]=0;
	cin >> b;
	char d;
	while(b--){
		for(int i=0;i<al;i++)
			if(c[i])
				cout << a[i];
			else
				cout << "*";
		cout << "\n";
		cin >> d;
		for(int i=0;i<al;i++)
			if(d==a[i])
				c[i]=1;
	}
	for(int i=0;i<al;i++)
			if(c[i])
				cout << a[i];
			else
				cout << "*";
}

Discussion