LQ0258 上三角方阵下标计算
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0258 上三角方阵下标计算相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2011初赛 Java C组I题
题目描述
方阵的主对角线之上称为"上三角"。
请你设计一个用于填充 n 阶方阵的上三角区域的程序。填充的规则是:使用 1,2,3… 的自然数列,从左上角开始,按照顺时针方向螺旋填充。
例如:当 n=3 时,输出:
1 2 3
6 4
5
当 n=4 时,输出:
1 2 3 4
9 10 5
8 6
7
当 n=5 时,输出:
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
输入描述
要求用户输入整数 n (3≤n≤20)。
输出描述
输出方阵的上三角部分。
要求每个数据宽度为 4,右对齐。
输入输出样例
示例
输入
9
输出
1 2 3 4 5 6 7 8 9
24 25 26 27 28 29 30 10
23 39 40 41 42 31 11
22 38 45 43 32 12
21 37 44 33 13
20 36 34 14
19 35 15
18 16
17
问题分析
(略)
AC的C语言程序如下:
/* LQ0258 上三角方阵 */
#include <stdio.h>
int drow[] = 0, 1, -1;
int dcol[] = 1, -1, 0;
#define N 20
int n, a[N][N];
int main()
scanf("%d", &n);
for (int i = 1, r = 0, c = 0, k = 0; i <= n * (n + 1) / 2; i++)
a[r][c] = i;
int nr = r + drow[k];
int nc = c + dcol[k];
if (nr < 0 || nr >= n || nc < 0 || nc >= n || a[nr][nc])
k++, k %= 3;
nr = r + drow[k];
nc = c + dcol[k];
r = nr, c = nc;
for (int i = 0; i < n; i++)
for (int j = 0; j < n - i; j++)
printf("%4d", a[i][j]);
printf("\\n");
return 0;
以上是关于LQ0258 上三角方阵下标计算的主要内容,如果未能解决你的问题,请参考以下文章
ZZNUOJ_C语言1125:上三角矩阵的判断(附完整源码)