打印图案

打印图案

题目1:

1
2
3
4
5
6
7
8
         * 
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*

我写的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>

int main()
{
int space = 39, star = 1;
for (int i = 1;i <= 7;i++) {
for (int j = 1;j <= space;j++) {
printf(" ");
}
for (int k = 1;k <= star;k++) {
printf(" * ");
}
if (i <= 3) {
space -= 3;
star += 2;
}
else {
space += 3;
star -= 2;
}
printf("\n");
}

return 0;
}

AI的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <math.h> // 需要用到 abs() 函数
#include <stdlib.h> // 标准库包含 abs

int main()
{
int total_rows = 7; // 总行数
int mid = total_rows / 2 + 1; // 中心行号 (这里是 4)
int initial_indent = 40; // 起始缩进

for (int i = 1; i <= total_rows; i++) {

// 【核心算法】
// 计算当前行 i 距离中心行 mid 有多远
// abs(4 - 1) = 3 (第一行距离中心3个单位)
// abs(4 - 4) = 0 (第四行距离中心0个单位)
int distance = abs(mid - i);

// 距离中心越远,星星越少,星星数 = (总半高 - 距离) * 2 - 1 ?
// 也可以反过来想:最大星星数是7,每远离中心1步,星星少2个
int current_star_count = 7 - (distance * 2);

// 距离中心越远,前面空格越多
// 每一级距离增加3个空格
int current_space_count = initial_indent + (distance * 3);

// --- 开始打印 ---

// 1. 打印空格
for (int j = 0; j < current_space_count; j++) {
printf(" ");
}

// 2. 打印星星
for (int k = 0; k < current_star_count; k++) {
printf("* ");
}

printf("\n");
}

return 0;
}

我为啥写这篇md?

因为我得到了目前最牛逼的AI:哈基米(Gemini)

想测试一下,于是顺便写了这篇md


打印图案
http://example.com/2025/11/29/打印图案/
作者
王柏森
发布于
2025年11月29日
许可协议