Lazy loaded image
难题解惑(2025.11.10)
字数 1314阅读时长 4 分钟
2025-11-10
2025-11-10
password
comment
type
status
date
slug
summary
tags
category
icon

📝 原题再现

选自信息学院 ITC 平台 “c/c++程序设计第三次实验课作业 (3/8)”第6题

问题描述

输入n,输出nn列的由+.组成的正方形,其中最外面一圈全是+,第二圈全是.,……,对于第i圈,如果i是奇数,那么全是+,否则全是.

输入形式

一行,一个整数n

输出形式

n行,为满足题目要求的正方形。注意不要有行末空格。

样例输入

样例输出

样例说明

2≤n≤100
 

代码示例

思路 1

 

思路 2 (由 ChatGPT 生成)

 
下面针对思路2给出解析。
 

详细解析·思路 2

  • #include <iostream>:引入输入输出库,能使用 cincout
  • using namespace std;:避免每次写 std::,便于初学者书写(注意:大型工程通常不推荐在头文件中使用)。
 
  • 声明变量 n,用于存放正方形的边长。
  • 从用户输入读取一个整数赋给 n
注意事项:
  • 根据题目条件,2 ≤ n ≤ 100
  • 没有额外空格、换行或提示符。
 
  • 外层 for 循环负责一行一行地输出。
  • i 表示当前行号(从 0n-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 表示一切正常。
 
上一篇
C语言中的函数指针与回调函数(C14)
下一篇
难题解惑(2025.11.03)

评论
Loading...