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:上三角矩阵的判断(附完整源码)

LQ0239 方阵旋转代码填空

线代--矩阵的分解-LU分解n阶方阵

方阵求值——上三角行列式定义(康拓展开求值)

LA_#常见矩阵@特殊类型矩阵@三角矩阵@对交矩阵#特殊行列式@范德蒙行列式

上下三角及对角方阵