password
comment
type
status
date
slug
summary
tags
category
icon
📝 原题再现
选自信息学院 ITC 平台 “c/c++程序设计第三次实验课作业 (3/8)”第6题
问题描述
输入
n,输出n行n列的由+和.组成的正方形,其中最外面一圈全是+,第二圈全是.,……,对于第i圈,如果i是奇数,那么全是+,否则全是.。输入形式
一行,一个整数
n。输出形式
n行,为满足题目要求的正方形。注意不要有行末空格。
样例输入
样例输出
样例说明
2≤n≤100
代码示例
思路 1
思路 2 (由 ChatGPT 生成)
下面针对思路2给出解析。
详细解析·思路 2
#include <iostream>:引入输入输出库,能使用cin、cout。
using namespace std;:避免每次写std::,便于初学者书写(注意:大型工程通常不推荐在头文件中使用)。
- 声明变量
n,用于存放正方形的边长。
- 从用户输入读取一个整数赋给
n。
注意事项:
- 根据题目条件,
2 ≤ n ≤ 100。
- 没有额外空格、换行或提示符。
- 外层
for循环负责一行一行地输出。
i表示当前行号(从0到n-1)。
- 每循环一次,就打印出一整行(共
n个字符),最后输出一个换行符\n。
- 内层循环负责一列一列地输出当前行的每个字符。
- 每次循环根据
(i, j)的位置计算当前格子属于第几层(圈),再决定输出+还是.。
其中:
(i, j):当前位置。
i:到上边的距离。
j:到左边的距离。
n - 1 - i:到下边的距离。
n - 1 - j:到右边的距离。
取这四个距离的最小值,就是该点所在的“层”号。
位置 (i,j) | 四边距离 | 最小值 layer | 层数(从1开始) |
(0,0) | 0,0,9,9 | 0 | 第1层 |
(1,1) | 1,1,8,8 | 1 | 第2层 |
(2,2) | 2,2,7,7 | 2 | 第3层 |
- 如果
layer是偶数(0、2、4...),说明当前圈是奇数层(第1、3、5层),输出'+'。
- 如果
layer是奇数(1、3、5...),说明当前圈是偶数层(第2、4、6层),输出'.'。
cout << '\n';:输出换行,准备开始下一行(对应下一个i)。
return 0;:程序正常结束。返回0表示一切正常。
- 作者:计算机类2507班
- 链接:https://learning.lcyteam.me//2a736b60f4cf808193aefedc21389f7c
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。







