前言:
由于洛谷发布题解有限制,所以在CSDN上发布洛谷题解。
所有题解均是Java语言, 但是思路是相同的
每篇都是刷题日常,尽量讲清楚算法逻辑。
希望有问题还请大佬们指导!
目标:25年蓝桥杯省一 !
一.输出字符菱形(洛谷B2025)
题目描述
用 *
构造一个对角线长
5
5
5 个字符,倾斜放置的菱形。
输入格式
没有输入要求。
输出格式
如样例所示。用 *
构成的菱形。
样例 #1
样例输入 #1
样例输出 #1
*
***
*****
***
*
只用一个for循环来控制行数解决这个问题
相比于其他博主的代码,分上下两个部分的来说,本人写的代码更简洁优雅。遇到这种打印对称图案的题目,无非就是找规律。
比如这个五行的菱形图案,我的变量 i 是从-2到2来进行控制的。可以看到 i 的绝对值就是每行空格的数量。所以空格的问题就解决了

那么接下来就是 * 的表示了
观察前三行,很明显的发现 * 的个数就是 i * 2 + 5
可是当i = 1 和 i = 2
时就不行了,那很简单,取个反,变成负数。
i | * | 规律 |
---|---|---|
-2 | 1 | i * 2 + 5 |
-1 | 3 | i * 2 + 5 |
0 | 5 | i * 2 + 5 |
1 | 3 | -i * 2 + 5 |
2 | 1 | -i * 2 + 5 |
for (int i = -2 ; i <= 2; i++) {
for (int j = Math.abs(i); j > 0 ; j--) {
System.out.print(' ');
}
//三目运算符来修改i的值
for (int j = 1; j <= (i > 0 ? (-i * 2 + 5) : (i * 2 + 5)); j++) {
System.out.print('*');
}
System.out.println();
}
这是当行数为n时的代码,将对应的位置改成n就行
public static void main(String[] args) {
DiamondPattern(9);
}
public static void DiamondPattern(int n) {
for (int i = -n/2 ; i <= n/2; i++) {
for (int j = Math.abs(i); j > 0 ; j--) {
System.out.print(' ');
}
for (int j = 1; j <= (i > 0 ? (-i*2+n) : (i*2+n)); j++) {
System.out.print('*');
}
System.out.println();
}
}
结果也是没问题的!!