行数转换法 打印菱形回文数图案
打印如下菱形数字图案(输入 n=3 时):
1
121
12321
121
1
要求:输入一个正整数 n,输出对应大小的菱形。
行数
1 2 3 4 5; 循环次数 n * 2 - 1
空格
2 1 0 1 2
行转空格
-2 -1 0 1 2; i - n
2 1 0 1 2; abs(i - n)
数字
1 3 5 3 1
行转数字
-2 -1 0 1 2; i - n
2 1 0 1 2; abs(i - n)
1 2 3 2 1; n - abs(i - n)
2 4 6 4 2; (n - abs(i - n)) * 2
1 3 5 3 1; (n - abs(i - n)) * 2 - 1
回文
1 2 3 2 1
设当前行最大数为k k为当前循环n - abs(i - n);
行转回文
-2 -1 0 -1 -2; i - k
2 1 0 1 2; abs(i - k)
1 2 3 2 1; k - abs(i - k)
#include <stdio.h> #include <math.h> int main() { int n, i, j, k; scanf("%d", &n); for (i = 1; i <= 2 * n - 1; i++) { for (j = 1; j <= abs(i - n); j++) printf(" "); k = n - abs(i - n); for (j = 1; j <= 2 * k - 1; j++) printf("%d", k - abs(j - k)); printf("\n"); } return 0; }