惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
T
Tor Project blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
P
Privacy International News Feed
C
Cybersecurity and Infrastructure Security Agency CISA
MyScale Blog
MyScale Blog
D
DataBreaches.Net
I
Intezer
GbyAI
GbyAI
Jina AI
Jina AI
The GitHub Blog
The GitHub Blog
S
Security @ Cisco Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
NISL@THU
NISL@THU
Project Zero
Project Zero
博客园_首页
Martin Fowler
Martin Fowler
A
About on SuperTechFans
J
Java Code Geeks
AI
AI
WordPress大学
WordPress大学
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
LINUX DO - 热门话题
云风的 BLOG
云风的 BLOG
腾讯CDC
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Cisco Blogs
L
LangChain Blog
Google Online Security Blog
Google Online Security Blog
AWS News Blog
AWS News Blog
Help Net Security
Help Net Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
D
Docker
N
Netflix TechBlog - Medium
Know Your Adversary
Know Your Adversary
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Secure Thoughts
H
Heimdal Security Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
O
OpenAI News
S
Security Affairs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 【当耐特】
雷峰网
雷峰网
V
Visual Studio Blog
T
Threat Research - Cisco Blogs

qlAD 的技术笔记

2026 年 6 月 7 日 -- 我有社交恐惧症,恐惧外面到处雷电风雨声(大学生活记录) 手把手带你实现哈希表(C/C++ 数据结构) 手把手带你实现图结构(C/C++ 数据结构) 手把手带你实现二叉树(C/C++ 数据结构) 手把手带你实现栈和队列(C/C++ 数据结构) 手把手带你实现单/双链表(C/C++ 数据结构) 手把手带你实现动态数组(C/C++ 数据结构) 2026 年 1 月 2 日 -- 我不怕冷,因为我内心炽热 【2025 年度总结】(大学生活记录) 2025 年 12 月 2 日 -- 省电模式:大一 100 天耗电日志(大学生活记录) 蓝桥杯备赛第一期 —— 枚举与模拟 2025 年 11 月 3 日 -- 用爱发电、大爱无私(大学生活记录) 2025 年 10 月 1 日 -- 二字开头第一年的生日记录及感悟随笔(大学生活记录) Python 初级 04 -- 目前为止 Python 中你们做题可能会遇到的问题以及七七八八 2025 年 9 月 24 日 -- 开学后的第一课及军训汇演(大学生活记录) Python 初级 03 -- 程序设计的三种结构之选择结构和循环结构 Python 初级 02 -- 基础的数据类型和输入输出 2025 年 9 月 17 日 -- 大连 2025 国际大体联足球世界杯(大学生活记录) Python 初级 01 -- 初识编程、理解计算机语言及程序运行方式 适合大一新生学习编程的前一课 -- 编程先导(编程的本质) 2025 年 9 月 12 日 -- 三天军训感受以及一些七七八八(大学生活记录) 2025 年 9 月 9 日 -- 体检、军训前的准备(大学生活记录) 适合大一新生的计算机基础知识 -- 个人认为足够版 2025 年 9 月 7 日 -- 既来之、则安之(大学生活记录) C++ 程序的内存布局 —— 代码区、全局/静态区、栈区和堆区 联想小新 pro 16 2025 开箱记录:跳过联网、office 激活、更换 win 11 专业版 R 语言中的数学函数 计算机软件著作权申请过程记录 从聚类到回归:用 Python 解析鸢尾花数据集的完整数据科学流程 条件概率、全概率与贝叶斯公式 —— 一篇文章带你死磕概率公式 高中化学物质反应规则表 —— 方程式之间也有规律可循 集合元素性质、关系、子集公式、基本运算 —— 一篇文章带你全方面死磕集合 如何为你的项目选择合适的许可证 -- 全方位指南 解释 3:1 和 9:3:3:1 的详细来源 —— 建立减数分裂与孟德尔遗传学定律之间的联系 重新设置磁盘分区以及 Btrfs 子卷(subvolume)布局的无损方案 零基础实战:用 Docker 启动 dockermailserver 绕过 25 端口封锁搭建个人邮箱服务器 基于 GitHub Actions + OSS 的自托管 APT 仓库全面指南 如何在安装 Debian 时配置 Btrfs 子卷 | 详细分步指南 一个合格的个人网站站长应该知道哪些事? CSS 基础入门教程 —— 选择器、样式声明 HTML 基础入门 —— 基本结构和语法 给博客添加一个文章数据统计的页面 Git 学习笔记(命令备忘表) Anki 牌组选项详细解释与设置 手动编译带有 KernelSU 的 OnePlus 6 内核 安卓类原生系统补全计划 —— PixelExperience(一加 OnePlus) 如何使用 use-sound 为 React 应用添加声音效果 标准化项目的 GitHub Flow 工作流 如何搭建设计自己的博客网站? 使用安知鱼主题同款的 Twikoo 评论组件 配置 GitHub Actions 实现自动化提交百度收录 第00期 | 环境搭建 & 递归 (一) | 基本数列递归 逐字符讲解 C 语言 HelloWorld 程序 2023 年回顾 🤟 Anki:记忆神器,助你高效学习 Gentoo 学习笔记 美化你的 PixelExperience OS Markdown 语法指南 搭建 OneDrive 目录索引 为什么用 65 表示大写字母 A
使用循环嵌套输出规则图形找规律讲解(嵌套循环-图形输出)
qlAD · 2025-10-07 · via qlAD 的技术笔记

cover

1、1065. 字符图形1-星号矩形

1065. 字符图形1-星号矩形

先打印一个 *print('*')

然后再循环 n 次打印 *for j in range(n)

将循环的 n* 放在同一行,print('*', end='')

再将 1 行循环 n 次,for i in range(n)

每打印完一行 *,换行,print()

n = int(input())
for i in range(n):
    for j in range(n):
        print('*', end='')
    print()

其实我们可以用一个 for 来表示上面的嵌套循环:

n = int(input())
for i in range(1, n + 1):
    print('*' * n)

这样,循环次数就从 n*n 次变成了 n 次,效率更高。

2、1066. 字符图形2-星号直角

1066. 字符图形2-星号直角

先循环 n 次打印行数,for i in range(n)

发现每的 * 个数与行数相等,但是行数是从 1 开始的,所以我们让 i 从 1 开始,for i in range(1, n+1)

然后发现每一行的 * 个数与行数相等,所以每一次的内部循环应该循环 i 次,for j in range(i)

将循环的 i* 放在同一行,print('*', end='')

每打印完一行 *,换行,print()

n = int(input())
for i in range(1,n+1):
    for j in range(i):
        print("*",end="")
    print()

或者可以找到规律后用一个 for 循环和一个字符串乘法来实现:

n = int(input())
for i in range(1, n+1):
    print("*" * i)

3、1782. 字符图形2-星号倒直角

1782. 字符图形2-星号倒直角

先循环 n 次打印行数,for i in range(n)

现在发现每一行的个数与行数相反,所以我们可以直接让 i 从 n 开始递减到 1,for i in range(n, 0, -1)

然后现在发现每一行的 * 个数与行数相等,所以每一次的内部循环应该循环 i 次,for j in range(i)

将循环的 i* 放在同一行,print('*', end='')

每打印完一行 *,换行,print()

n = int(input())
for i in range(n,0,-1):
    for j in range(i):
        print("*",end="")
    print()

或者可以找到规律后用一个 for 循环和一个字符串乘法来实现:

n = int(input())
for i in range(n):
    print("*" * (n - i))

4、1783. 数字直角(1)

1783. 数字直角(1)

先循环 n 次打印行数,有了前面的经验,直接让 i 从 1 开始,for i in range(1, n+1)

发现每一行都有 ii,然后再循环 i 次打印 ifor j in range(i)

将循环的 ii 放在同一行,print(i, end='')

每打印完一行 i,换行,print()

n = int(input())
for i in range(1,n+1):
    for j in range(i):
        print(i,end="")
    print()

或者可以找到规律后用一个 for 循环和一个字符串来实现:

n = int(input())
for i in range(1, n+1):
    print(str(i) * i)

5、1784. 数字直角(2)

1784. 数字直角(2)

先循环 n 次打印行数,for i in range(1, n+1)

发现每一行的数字个数与行数相同,然后再循环 i 次打印数字,for j in range(i)

不难看出每一行打印的是从 1i 的数字,所以我们内部循环打印 j 就行,print(j, end='')

但是这样每一行打印出来的数字是从 0 开始的,所以需要让 j 从 1 开始,for j in range(1, i+1)

每打印完一行数字,换行,print()

n = int(input())
for i in range(1,n+1):
    for j in range(1,i+1):
        print(j,end="")
    print()

6、1785. 数字直角(3)

1785. 数字直角(3)

先循环 n 次打印行数,for i in range(1, n+1)

现在发现每一行的个数与行数相反,所以我们可以直接让 i 从 n 开始递减到 1,for i in range(n, 0, -1)

然后发现每一行的数字个数与 i 相同,然后再循环 i 次打印数字,for j in range(i)

不难看出每一行打印的是从 1i 的数字,所以我们内部循环打印 j 就行,print(j, end='')

但是这样每一行打印出来的数字是从 0 开始的,所以需要让 j 从 1 开始,for j in range(1, i+1)

每打印完一行数字,换行,print()

n = int(input())
for i in range(n,0,-1):
    for j in range(1,i+1):
        print(j,end="")
    print()

7、1786. 数字直角(4)

1786. 数字直角(4)

来,自己说

n = int(input())
for i in range(n,0,-1):
    for j in range(i):
        print(i,end="")
    print()

或者找规律

n = int(input())
for i in range(n,0,-1):
    print(str(i) * i)

8、1067. 字符图形3-平行四边形

1067. 字符图形3-平行四边形

n * n* 就不说了,两层 for 循环

发现每一行前面都有空格,空格的个数与行数有关,第一行没有空格,第二行有一个空格,第三行有两个空格,所以空格的个数与行数差 1

每一行的空格数与行数差 1,所以直接让 i 从 0 开始,for i in range(n)

然后每一行打印 i 个空格,print(' ' * i, end='')

不能改变 j 的循环,因为 j 的循环是打印 * 的,所以空格的循环必须在 j 的循环之前

n = int(input())
for i in range(n):
    print(' ' * i, end="")
    for j in range(n):
        print("*",end="")
    print()

或者可以找到规律后用一个 for 循环和一个字符串乘法来实现:

n = int(input())
for i in range(n):
    print(' ' * i + '*' * n)

9、1068. 字符图形4-星号正三角

1068. 字符图形4-星号正三角

先循环 n 次打印行数,for i in range(1, n+1)

发现每一行的 " "* 个数与 n 和行数 i 有关

第一行一共有 n 个字符,第二行一共有 n + 1 个字符,所以现在直接让 i 从 0 开始,for i in range(n)

不难看出,第 i 行一共有 n + i 个字符,所以内部循环应该循环 n + i 次,for j in range(n + i)

发现每一行前面都有空格,空格的个数与行数有关,第一行有 n - 1 个空格,第二行有 n - 2 个空格,第三行有 n - 3 个空格,所以空格的个数与行数差 1

因为我们设置的 i 是从 0 开始的,所以空格的个数是 n - 1 - i

然后内部循环的时候,j 从 0 开始,如果 j 小于空格的个数,就打印空格,否则打印 *if j < spaces: print(' ', end='') else: print('*', end='')

每打印完一行,换行,print()

n = int(input())

for i in range(n):
    spaces = n - 1 - i
    for j in range(n + i):
        if j < spaces:
            print(' ', end='')
        else:
            print('*', end='')
    print()

这层嵌套不好理解的话,那你直接从 1 开始吧

i 从 1 开始,for i in range(1, n + 1)

发现每一行的 " "* 个数与 n 和行数 i 有关

1068. 字符图形4-星号正三角

n = int(input())
for i in range(1, n + 1):
    spaces = n - i
    for j in range(1, n + i):
        if j <= spaces:
            print(' ', end='')
        else:
            print('*', end='')
    print()

或者你上来就一眼看出规律

n = int(input())
for i in range(1,n+1):
    spaces = ' ' * (n - i)
    stars  = '*' * (2 * i - 1)
    print(spaces + stars)

当然此题有多种解法,找到规律很重要

10、1069. 字符图形5-星号梯形

1069. 字符图形5-星号梯形

先循环 n 次打印行数,for i in range(1, n+1)

发现每一行的 " "* 个数与 n 和行数 i 有关

" " 的个数为 n - i* 的个数为2 * i + 1

内部循环应该循环 spaces + stars 次,for j in range(1, spaces + stars + 1)

如果 j 小于等于空格的位数,就打印空格,否则打印 *if j <= spaces: print(' ', end='') else: print('*', end='')

每打印完一行,换行,print()

n = int(input())
for i in range(1,n+1):
    spaces = n - i
    stars = 2 * i + 1
    for j in range(1,spaces + stars + 1):
        if j <= spaces:
            print(" ", end="")
        else:
            print("*", end="")
    print()

或者一层循环

n = int(input())
for i in range(1,n+1):
    spaces = ' ' * (n - i)
    stars  = '*' * (2 * i +1)
    print(spaces + stars)

11、1070. 字符图形6-星号倒三角

1070. 字符图形6-星号倒三角

n = int(input())
for i in range(n,0,-1):
    spaces = n - i
    stars = 2 * i - 1
    for j in range(1,spaces + stars + 1):
        if j <= spaces:
            print(" ", end="")
        else:
            print("*", end="")
    print()

或者一层循环

n = int(input())
for i in range(n):
    spaces = ' ' * i
    stars  = '*' * (2 * (n - i) - 1)
    print(spaces + stars)

12、1071. 字符图形7-星号菱形

1071. 字符图形7-星号菱形

最笨的方法,就是来两遍

n = int(input())

for i in range(1,n+1):
    spaces = n - i + 1
    stars = 2 * i - 1
    for j in range(1, spaces + stars + 1):
        if j <= spaces:
            print(" ",end="")
        else:
            print("*",end="")
    print()

print("*" * (2 * n + 1))

for i in range(n,0,-1):
    spaces = n - i + 1
    stars = 2 * i - 1
    for j in range(1, spaces + stars + 1):
        if j <= spaces:
            print(" ",end="")
        else:
            print("*",end="")
    print()

或者你能发现这个规律:

  1. 总行数 2*n+1
  2. 对第 k
    • 先算它到中间行的距离 d = abs(k - (n + 1))
    • 这一行前面需要 d 个空格,后面需要 2*(n-d)+1 个星号
  3. 用字符串乘法一次性拼出整行,然后 print() 即可
n = int(input())
for k in range(1, 2 * n + 2):
    d = abs(k - (n + 1))
    print(' ' * d + '*' * (2 * (n - d) + 1))

13、1072. 字符图形8-数字三角

1072. 字符图形8-数字三角

先循环 n 次打印行数,for i in range(1, n + 1)

发现每一行的 " " 和数字个数与 n 和行数 i 有关

" " 的个数为 n - i,数字的个数为2 * i - 1

直接循环 n - i 次打印空格,for j in range(n - i): print(' ', end='')

又因为数字是从 1 开始的,所以我们再开一层循环,让 k 从 1 开始,for k in range(1, 2 * i - 1 + 1)

最后每打印完一行,换行,print()

n = int(input())

for i in range(1, n + 1):
    for j in range(n - i):
        print(" ", end="")
    for k in range(1, i * 2 - 1 + 1):
        print(k, end="")
    print()

14、1422. 数字矩形(1)

1422. 数字矩形(1)

懒得说,自己说

n = int(input())

for i in range(1, n + 1):
    for j in range(1, n + 1):
        print(i, end='')
    print()

或者

n = int(input())
for i in range(1, n + 1):
    print(str(i) * n)

15、1363. 数字矩形(2)

1363. 数字矩形(2)

懒得说,自己说

n = int(input())

for i in range(1, n + 1):
    for j in range(1, n + 1):
        print(j, end='')
    print()

16、1491. 数字三角

1491. 数字三角

懒得说,自己说

n = int(input())

for i in range(n,0,-1):
    spaces = n - i
    for k in range(spaces):
        print(" ", end="")
    for j in range(1, i + 1):
        print(j, end='')
    print()

17、1787. 字符图形-数字正三角(2)

1787. 字符图形-数字正三角(2)

懒得说,自己说

n = int(input())
for i in range(1, n + 1):
    spaces = n - i
    for k in range(spaces):
        print(" ", end="")
    for j in range(1, 2 * i):
        print(j, end='')
    print()

18、1788. 字符图形-数字正三角(3)

1788. 字符图形-数字正三角(3)

不就是那些换来换去嘛,自己说

n = int(input())
for i in range(n,0,-1):
    spaces = n - i
    for j in range(spaces):
        print(" ", end="")
    for k in range(1,2 * i):
        print(str(i), end="")
    print()

或者一层循环

n = int(input())
for i in range(n,0,-1):
    spaces = ' ' * (n - i)
    print(spaces + str(i) * (2 * i - 1))

19、1492. 空心正方形

1492. 空心正方形

只有最外层一圈有 *,里面都是空格

先循环 n 次打印行数,for i in range(1, n + 1)

然后再循环 n 次打印 * 或空格,for j in range(1, n + 1)

如果是第一行或最后一行,或者是第一列或最后一列,就打印 *,否则打印空格

n = int(input())
for i in range(1,n+1):
    for j in range(1,n+1):
        if i == 1 or i == n or j == 1 or j == n:
            print("*",end="")
        else:
            print(" ",end="")
    print()

或者

n = int(input())
for i in range(1,n+1):
    if i == 1 or i == n:
        print("*" * n)
    else:
        print("*"," " * (n - 2),"*",sep="")

20、1493. 放大的Z

1493. 放大的Z

循环 n 次打印行数,for i in range(1, n + 1)

然后再循环 n 次打印 * 或空格,for j in range(1, n + 1)

当外部循环到了第一行或最后一行时,打印 n 个 *

每一行空格的个数为 n - i,当内部循环到了第 n - i + 1 列时,打印 *

n = int(input())
for i in range(1, n + 1):
    for j in range(1, n + 1):
        if i == 1 or i == n or j == n - i + 1:
            print('*', end='')
        else:
            print(' ', end='')
    print()

或者一层循环:

n = int(input())
for i in range(1, n + 1):
    if i == 1 or i == n:
        print('*' * n)
    else:
        print(' ' * (n - i) + '*')

21、1494. 奇特的三角

1494. 奇特的三角

先循环 n 次打印行数,for i in range(1, n + 1)

每一行的列数为 2 * n - 1,所以内部循环应该循环 2 * n - 1 次,for j in range(1, 2 * n)

如果 j 在 n - i + 1n + i - 1 之间(包括等于),就打印 @,否则打印 *

n = int(input())

for i in range(1, n + 1):
    for j in range(1, 2 * n):
        if n - i + 1 <= j <= n + i - 1:
            print("@", end="")
        else:
            print("*", end="")
    print()

或者更简单的:

n = int(input())
for i in range(1, n + 1):
    stars = '*' * (n - i)
    ats = '@' * (2 * i - 1)
    print(stars + ats + stars)

22、1073. 沙漏

1073. 沙漏

n = int(input()) // 2
for i in range(n, 0, -1):
    print(' ' * (n - i) + "*" * (2 * i + 1))
print(" " * n + "*")
for i in range(1, n + 1):
    print(' ' * (n - i) + "*" * (2 * i + 1))

23、1219. 放大的箭头

1219. 放大的箭头

n = int(input())
for i in range(n // 2 + 1):
    print(' ' * i, end='')
    print('*' * n)

for i in range(n // 2 - 1, -1, -1):
    print(' ' * i, end='')
    print('*' * n)

24、1008. 字符图形9-数字正三角

1008. 字符图形9-数字正三角

n = int(input())

for i in range(1,n+1):
    print(" " * (n - i) + str(i) * (2 * i - 1))

25、1006. 打印星号三角形

1006. 打印星号三角形

和之前的一道题很像

n = int(input())
for i in range(1, n + 1):
    spaces = ' ' * (n - i)
    stars = '*' * (2 * i - 1)
    print((spaces + stars + spaces)*3)