特点:看似简单,实则考循环规律 + 二维数组,必须多练。常见题型:
- 字符棱形、三角形、长方形
- 旋转数字 / 矩阵旋转 / 矩阵翻转
- 杨辉三角
- 2048 问题
一、字符棱形
题目描述
输入整数 n(对角半长),用 * 输出棱形。
输入:3
输出:
*
***
*****
***
*
解题思路
分成上三角 + 下三角:
- 上三角:
i从 1 到 n - 下三角:
i从 n-1 到 1每层:先打空格 ,再打*
完整代码
cpp
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
// 上三角
for (int i = 1; i <= n; i++) {
// 打印空格
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
// 打印 *
for (int j = n - i + 1; j < n + i; j++) {
printf("*");
}
printf("\n");
}
// 下三角
for (int i = n - 1; i >= 1; i--) {
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
for (int j = n - i + 1; j < n + i; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
二、杨辉三角形(DreamJudge 1062)
题目描述
输入行数 n(n≤20),输出前 n 行杨辉三角,输入 0 结束。规律:
- 两边都是 1
- 中间数 = 左上角 + 正上方
a[i][j] = a[i-1][j] + a[i-1][j-1]
输入:5
输出:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
完整代码
cpp
#include <stdio.h>
int main() {
int a[21][21] = {0};
int n;
while (scanf("%d", &n) != EOF) {
if (n == 0) break;
a[1][1] = 1;
// 构造杨辉三角
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= i; j++) {
a[i][j] = a[i-1][j] + a[i-1][j-1];
}
}
// 输出
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
}
return 0;
}
题型总结
- 图形题:拆分成上、下、左、右,一层一层写循环。
- 矩阵 / 杨辉三角:用二维数组 ,找递推公式。
- 机试遇到:先画样例 → 找规律 → 写循环 → 调试。