2. 填充矩阵

【问题描述】

编程实现自动填充n×n矩阵元素数值,填充规则为:从第一行最后一列矩阵元素开始按逆时针方向螺旋式填充数值1,2,…,n×n,其中:n从键盘输入且3≤n≤20。最后向显示器输出该矩阵所有元素。

【输入形式】

输入一个正整数,为矩阵的行数和列数

【输出形式】

按行列顺序输出n×n矩阵的所有元素。

(1)每行n列矩阵元素均需在一行内输出显示

(2)输出每行矩阵元素后均需换行输出下一行,共输出n

(3)每个矩阵元素数值的域宽均为4位且右对齐

【样例输入】

11

【样例输出】

  11  10   9   8   7   6   5   4   3   2   1

  12  49  48  47  46  45  44  43  42  41  40

  13  50  79  78  77  76  75  74  73  72  39

  14  51  80 101 100  99  98  97  96  71  38

  15  52  81 102 115 114 113 112  95  70  37

  16  53  82 103 116 121 120 111  94  69  36

  17  54  83 104 117 118 119 110  93  68  35

  18  55  84 105 106 107 108 109  92  67  34

  19  56  85  86  87  88  89  90  91  66  33

  20  57  58  59  60  61  62  63  64  65  32

  21  22  23  24  25  26  27  28  29  30  31

【代码】

#include<stdio.h>
 
void Visit(int a[][400],int n)
{
    int p=n-1,q=0,i;
    int count=0;
 
    while(count<n*n)  
    {
        for(i=p;i>=q;i--)
            {a[q][i]=count+1;
			count+=1;} 
 
        for(i=q+1;i<=p;i++)
            {a[i][q]=count+1;
			count+=1;} 
 
        for(i=q+1;i<=p;i++)
            {a[p][i]=count+1;
			count+=1;}
 
        for(i=p-1;i>=q+1;i--)
            {a[i][p]=count+1;
			count+=1;}
            p--;
            q++;
    }
 
 
}
 
void Print(int a[][400],int n)
{   int h,j;
    for(h=0;h<n;h++)
    {
        for(j=0;j<n;j++)
            {printf("%3d ",a[h][j]);}
             printf("\n");
    }
}
 
int main()
{
    int n,a[400][400];
    scanf("%d",&n);
    Visit(a,n);
    Print(a,n);
    return 0;
}


【注释与说明】

本题采用的思路为通过a[i][j]这种二维数组分别控制行和列的赋值,行坐标与列坐标中一个固定另一个for循环控制逐渐增加或减小

    原文作者:大学渣tyx
    原文地址: https://blog.csdn.net/qq_56030037/article/details/116033552
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞