用普通循环写法

B4412 [GESP202509 二级] 菱形

题目描述

小 A 想绘制一个菱形。具体来说,需要绘制的菱形是一个 nnnnnn 列的字符画,nnn 是一个大于 111 的奇数。菱形的四个顶点依次位于第 111 行、第 111 列、第 nnn 行、第 nnn 列的正中间,使用 # 绘制。相邻顶点之间也用 # 连接。其余位置都是 .

例如,一个 555555 列的菱形字符画是这样的:

..#..
.#.#.
#...#
.#.#.
..#..

给定 nnn,请你帮小 A 绘制对应的菱形。

输入格式

一行,一个正整数 nnn

输出格式

输出共 nnn 行,表示对应的菱形。

输入输出样例 #1

输入 #1

3

输出 #1

.#.
#.#
.#.

输入输出样例 #2

输入 #2

9

输出 #2

....#....
...#.#...
..#...#..
.#.....#.
#.......#
.#.....#.
..#...#..
...#.#...
....#....

说明/提示

对于所有测试点,保证 3≤n≤293 \leq n \leq 293n29 并且 nnn 为奇数。

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;	// 严格要求

int main(){
	ios :: sync_with_stdio(0);	// 提高cin、cout的运行速度
	ll n;
	cin >> n;
	ll d1 = (n + 1) / 2;
	ll d2 = (n + 1) / 2, d3 = (n + 1) / 2; //d2左列下标 d3右列下标 
	ll d4 = 2, d5 = n - 1; //d4左列下标 d5右列下标 
	//上半部分 
	for(ll i = 1; i <= d1; i++){
		for(ll j = 1; j <= n; j++){
			if(j != d2 && j != d3){		//不在左列 且 不在右列 
				cout << ".";
			}
			else{
				cout << "#";
			}
		}
		cout << endl;
		d2--;
		d3++;
	}
	
	//下半部分 (行倒着输出) 
	for(ll i = 1; i <= d1 - 1; i++){
		for(ll j = 1; j <= n; j++){
			if(j != d4 && j != d5){		//不在左列 且 不在右列 
				cout << ".";
			}
			else{
				cout << "#";
			}
		}
		cout << endl;
		d4++;
		d5--;
	}

    return 0;
}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐