目录
1.螺旋输出矩阵
- 原理:如图所示
- 设置四个边界上下左右
int left = 0, right = n - 1, up = 0, down = n - 1;
- 向右输出;向下输出;向左输出;向上输出;(使用for循环)
for (int i = left; i <= right; ++i)
{
printf("%5d ", ar[up][i]);
}
for (int i = up + 1; i <= down; ++i)
{
printf("%5d ", ar[i][right]);
}
for (int i = right - 1; i >= left && up < down; --i)
{
printf("%5d ", ar[down][i]);
}
for (int i = down - 1; i > up && left < right; --i)
{
printf("%5d ", ar[i][left]);
}
- 使用while循环,对剩下的矩阵重复整个过程,直到上下、左右的壁与壁碰在一起 (up <= down && left <= right,这是避免碰壁的条件)。
while (left <=right && up <=down)
- 边界的调整
left++; right--; up++; down--;
- 完整代码
#include<stdio.h>
int main()
{
const int n = 4;
int ar[n][n] = {
{1, 3, 5, 7 },
{10,12,14,16},
{20,22,24,26},
{30,32,34,36},
};
int left = 0, right = n - 1, up = 0, down = n - 1;
while (left <=right && up <=down)
{
for (int i = left; i <= right; ++i)
{
printf("%5d ", ar[up][i]);
}
for (int i = up + 1; i <= down; ++i)
{
printf("%5d ", ar[i][right]);
}
for (int i = right - 1; i >= left && up < down; --i)
{
printf("%5d ", ar[down][i]);
}
for (int i = down - 1; i > up && left < right; --i)
{
printf("%5d ", ar[i][left]);
}
left++; right--;
up++;down--;
}
return 0;
}
- 输出结果
2.螺旋填入三角形
原理:如图所示
- 设置四个边界上下左右
int left = 0, right = n - 1, up = 0, down = n - 1;
- 向下填入;向右填入;向左上填入;(使用for循环)
for (int i = up; i <= down; i++) {
ar[i][left] = num++;
}
for (int i = left + 1; i <= right; i++) {
ar[down][i] = num++;
}
int temp = right-1;
for (int i = down-1 ; i > up; i--)
{
ar[i][temp--] = num++;
}
- 使用while循环,对剩下的三角形重复整个过程,直到上下、左右的壁与壁碰在一起 (up <= down && left <= right,这是避免碰壁的条件)。
while (left <=right && up <=down)
- 边界的调整
up+=2; down--;
left++; right-=2;
- 完整代码
#include <stdio.h>
int main() {
int num = 1;
const int n = 10;
int ar[n][n];
int left = 0, right = n - 1, up = 0, down = n - 1;
while (left <=right && up <=down) {
for (int i = up; i <= down; i++) {
ar[i][left] = num++;
}
for (int i = left + 1; i <= right; i++) {
ar[down][i] = num++;
}
int temp = right-1;
for (int i = down-1 ; i > up; i--)
{
ar[i][temp--] = num++;
}
up+=2; down--;
left++; right-=2;
}
for (int i = 0; i<n; i++) {
for (int j = 0; j <=i; j++) {
printf("%5d", ar[i][j]);
}
printf("\n");
}
return 0;
}
- 运行结果
3.总结
- 此类问题看似简单,实则需要耐心寻找其中的规律。
- 此类问题的解决离不开在草稿纸上的勾画,需要不断进行循环,检查规律是否全部符合。