a622 - 2. Vertical Printing
題目描述
題目要求讀取一系列隊名,直到讀取到 "END" 為止,然後將這些隊名垂直輸出。隊名長度不足 16 時,需用空格補齊。輸出時,每個字元之間應有兩個空格。
解題思路
程式使用一個二維字元陣列 ans 來儲存隊名。讀取每個隊名後,先檢查其長度是否超過目前的最大長度,若超過則更新最大長度。然後,將隊名補齊到 16 個字元,再將隊名中的每個字元存入 ans 陣列的對應位置。最後,按照行優先的順序輸出 ans 陣列中的字元,如果字元為預設值 '?',則跳過不輸出。
複雜度分析
- 時間複雜度: O(N * M),其中 N 是隊名的數量,M 是隊名的最大長度 (在本題中為 16)。
- 空間複雜度: O(M * M),其中 M 是隊名的最大長度 (在本題中為 50)。
程式碼
#include <iostream>
#include <string>
using namespace std;
char ans[50][50];
int main(){
for(int i=0;i<50;i++){
for(int j=0;j<50;j++){
ans[i][j]='?';
}
}
int x=0,max=0;
string a;
while(getline(cin,a)){
if(a.length()>max){
max=a.length();
}
if(a=="END")break;
while(a.length()<16){
a+=' ';
}
int al=a.length();
for(int i=0;i<al;i++){
ans[i][x]=a[i];
}
x++;
}
for(int j=0;j<max;j++){
for(int i=0;i<50;i++){
if(ans[j][i]!='?'){
cout << ans[j][i] << " ";
}
}
cout << "\n";
}
}