藍橋杯 打印十字圖


問題描述

小明為某機構設計了一個十字型的徽標(並非紅十字會啊),如下所示:

..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..

對方同時也需要在電腦dos窗口中以字符的形式輸出該標志,並能任意控制層數。

輸入格式

一個正整數 n (n<30) 表示要求打印圖形的層數。

輸出格式

對應包圍層數的該標志。

樣例輸入1

1

樣例輸出1

..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..

樣例輸入2

3

樣例輸出2

..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..

提示

請仔細觀察樣例,尤其要注意句點的數量和輸出位置。

分析

是時候祭出這張圖了,再次原諒我拙劣的畫圖技能……

這里寫圖片描述

代碼

#include <iostream>
#include <vector>
using namespace std;

void printVector2(vector<vector<char> > res) {
for (int i = 0; i < res.size(); i++) {
for (int j = 0; j < res.size(); j++)
cout << res[i][j];
cout << endl;
}
}

void changeAtRow(int start, int end, int row, vector<vector<char> > &res) {
for (int col = start; col <= end; col++)
res[row][col] = '$';
}

void changeAtCol(int start, int end, int col, vector<vector<char> > &res) {
for (int row = start; row <= end; row++)
res[row][col] = '$';

}

void printFlag(int n) {
int length = 1 + 4 * n + 2 * 2;
vector<vector<char> > res(length, vector<char>(length, '.'));
for (int i = n; i >= 0; i--) {
int start = 2 * (n - i) + 2;
int end = start + 1 + i * 4 - 1;
int row = 2 * (n - i);
int row2 = row + i * 4 + 4;
changeAtRow(start, end, row, res);
changeAtRow(start, end, row2, res);
changeAtCol(row, row + 2, start, res);
changeAtCol(row, row + 2, end, res);
changeAtCol(row2 - 2, row2, start, res);
changeAtCol(row2 - 2, row2, end, res);
}
for (int i = n; i >= 0; i--) {
int start = 2 * (n - i) + 2;
int end = start + 1 + i * 4 - 1;
int col = 2 * (n - i);
int col2 = col + i * 4 + 4;
changeAtCol(start, end, col, res);
changeAtCol(start, end, col + i * 4 + 4, res);
changeAtRow(col, col + 2, start, res);
changeAtRow(col, col + 2, end, res);
changeAtRow(col2 - 2, col2, start, res);
changeAtRow(col2 - 2, col2, end, res);
}
printVector2(res);
}

int main(int argc, char *argv[]) {
int n;
cin >> n;
printFlag(n);
return 0;
}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com