代码源 [R10C]多重回字

// 11111111111.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
题目信息
题目链接: https://bs.daimayuan.top/p/57
题目名称: #57. [R10C]多重回字
题目类型: 模拟、字符串、构造
时空限制: 1秒/512MB
难度: 2
题目描述
给定奇数 n,请你用 # 和空格画一个 n×n 的多重回字。
具体来说,最外面一层是由 # 组成的正方形,向内一层是空格组成的正方形,再向内一层又是 # 组成的正方形,以此类推。
输入格式
第一行包含一个整数 n 表示多重回字的边长。数据保证 n 是奇数。
输出格式
输出一个 n×n 的由 # 和空格组成的多重回字,格式见样例。


输入
7
输出
#######
#     #
# ### #
# # # #
# ### #
#     #
#######

输入
9
输出
#########
#       #
# ##### #
# #   # #
# # # # #
# #   # #
# ##### #
#       #
#########

对于100% 的数据,3≤n≤1999。数据保证 n 是奇数。
*/


#include <iostream>
#include <string>
#include <vector>

using namespace std;


int n;


int main()
{
	cin >> n;
	string line(n, '#');
	string left, mid=line, right; int linetype = 1;
	vector<string> vv; vv.push_back(line);
	for (int i = 1; i <= n / 2; i++) {
		int len = mid.length() - 2;
		if (linetype == 1) {
			mid = string(len,' ');
			left.push_back('#');
			right.insert(right.begin(), '#');
			linetype = 0;
		}
		else {
			mid = string(len, '#');
			left.push_back(' ');
			right.insert(right.begin(), ' ');
			linetype = 1;
		}
		line = left + mid + right;
		vv.push_back(line);
	}

	for(int i = 0; i <= n / 2; i++) {
		cout << vv[i] << endl;
	}
	for(int i= n / 2 -1 ; i >= 0; i--) {
		cout << vv[i] << endl;
	}
	

	return 0;
}

 

posted on 2025-07-09 10:19  itdef  阅读(53)  评论(0)    收藏  举报

导航