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

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
Vercel News
Vercel News
C
Check Point Blog
G
Google Developers Blog
博客园 - 司徒正美
量子位
Engineering at Meta
Engineering at Meta
S
SegmentFault 最新的问题
Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
A
About on SuperTechFans
美团技术团队
D
DataBreaches.Net
Stack Overflow Blog
Stack Overflow Blog
Jina AI
Jina AI
Y
Y Combinator Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Apple Machine Learning Research
Apple Machine Learning Research
J
Java Code Geeks
MongoDB | Blog
MongoDB | Blog
人人都是产品经理
人人都是产品经理
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The Cloudflare Blog
U
Unit 42

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 解析鸢尾花数据集的完整数据科学流程 条件概率、全概率与贝叶斯公式 —— 一篇文章带你死磕概率公式 高中化学物质反应规则表 —— 方程式之间也有规律可循
使用循环嵌套输出规则图形找规律讲解(嵌套循环-图形输出)
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)