简体中文
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)
0
0
0
0