蓝桥杯 PREV-2 打印十字图

题目链接:

PREV-2 打印十字图

思路:

我们注意到我们只需要求出整张图的1/4个矩形,即可通过对称求出整张图;
以整张图的中心为坐标原点, 我们以右上角的1/4矩形为例,层数i0开始一直到n,第i层的轨迹就是从 ( 0 , 2 i + 2 ) (0, 2 * i + 2) 开始往右打印 2 i + 1 2 * i +1 $,然后依次往下、往下、往右打印三个$,然后往右挪一格,从该格开始往下打印2 * i + 1$
将每层打印好,然后按对称的规律输出即可;

代码:

#include<bits/stdc++.h>

using namespace std;

int n;
bool c[100][100];

int main() {
#ifdef MyTest
	freopen("Sakura.txt", "r", stdin);
#endif
	cin >> n;
	for(int i = 0; i <= n; i++) {
		int x = -1, y = 2 * i + 2, cnt = 2 * i + 1;
		for(int j = 0; j < cnt; j++) c[++x][y] = 1;
		c[x][--y] = 1; c[x][--y] = 1; c[++x][y] = 1; ++x;
		for(int j = 0; j < cnt; j++) c[x][y--] = 1;
	}
	int d = 2 * n + 3;
	vector<string> v;
	for(int i = d - 1; i >= 0; i--) {
		string s = "";
		for(int j = d - 1; j >= 0; j--) s += c[j][i] ? '$' : '.';
		for(int j = 1; j <= d - 1; j++) s += c[j][i] ? '$' : '.';
		cout << s << '\n';
		v.push_back(s);
	}
	for(int i = d - 2; i >= 0; i--) cout << v[i] << '\n';
	return 0;
}
发布了356 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_45228537/article/details/104144789
今日推荐