e698 - OREOREO!
題目描述
題目要求根據輸入的 O 和 RE 的寬高以及成分,輸出指定數量的餅乾圖案。O 和 RE 的寬高可能不同,需要將較短的部分置中輸出。
解題思路
這題主要考驗字串輸出格式的控制。程式首先讀取 O 和 RE 的寬高以及成分,然後讀取餅乾的數量。對於每個餅乾,程式會根據輸入的字串(O 或 RE)來決定輸出哪種成分的餅乾。如果字串是 O,則輸出 O 的圖案;如果字串是 RE,則輸出 RE 的圖案。在輸出圖案時,需要考慮置中的情況,即如果 O 或 RE 的寬度較小,則需要在輸出前添加空格以實現置中。
複雜度分析
- 時間複雜度: O(n * m * k),其中 n 是餅乾的數量,m 是字串的長度,k 是 O 或 RE 的寬高。
- 空間複雜度: O(1),程式只使用了常數級別的額外空間。
程式碼
#include <iostream>
using namespace std;
struct oreo{
int x,y,xx,yy,dis;
char o,re;
};
oreo a;
int n;
string s;
int main(){
cin.tie(0); ios::sync_with_stdio(false);
cout.tie(0);
while(cin >> a.y >> a.x >> a.yy >> a.xx >> a.o >> a.re){
a.dis=abs(a.y-a.yy);
cin >> n;
for(int ca=0;ca<n;++ca){
cin >> s;
for(int i=0;i<s.size();++i){
if(s[i]=='O'){
for(int i=0;i<a.x;++i){
if(a.y<a.yy){
for(int i=0;i<(a.dis+a.dis%2)/2;++i){
cout << " ";
}
}
for(int j=0;j<a.y;++j){
cout << a.o;
}
cout << "\n";
}
}
else{
++i;
for(int i=0;i<a.xx;++i){
if(a.yy<a.y){
for(int i=0;i<(a.dis+a.dis%2)/2;++i){
cout << " ";
}
}
for(int j=0;j<a.yy;++j){
cout << a.re;
}
cout << "\n";
}
}
}
cout << "\n";
}
}
}