螺旋数组 c语言,C语言实现输出一个回型递增的螺旋矩阵

首先,说到输出矩阵无论什么水平的人都会认为使用数组最为方便,所以这里说明的是利用C语言多维数组的实现。

首先是算法需要的变量定义

int i,j,n,sum;

printf("请输入矩阵的行列长度:\n");

scanf("%d",&n);

int juzhen[n][n];

memset(juzhen,0,sizeof(juzhen));

sum=1;

其次就是核心算法,此程序核心在于如何写入元素到定义的数组中,要实现回型的数据递增,就必须使用不同的方法的输入不同方向递增的数据;

还有这里要注意数组的定义,是从0号下标开始填入元素(当然从下标为一的元素开始也是可以的,此方法类似不予说明);

另外在换方向输入的时候还要注意前一方向已经输入数据的数组元素不能再输入,于是使用if语句以区分是否填充过数据(这里需要提前将数组全部置零,使用了memset函数,此函数需要头文件string.h)。

这里定义了for语句实现的四种方向的输入

for(i=0;i

{

for(j=0;j

{

if(juzhen[i][j]==0)

juzhen[i][j]=sum++;

}

for(j=i;j

{

if(juzhen[j][n-1-i]==0)

juzhen[j][n-1-i]=sum++;

}

for(j=n-i-1;j>i;j--)//向左

{

if(juzhen[n-1-i][j]==0)

juzhen[n-1-i][j]=sum++;

}

for(j=n-1-i;j>i;j--)//向上

{

if(juzhen[j][i]==0)

juzhen[j][i]=sum++;

}

最后在对输入的数字做区分,当N阶矩阵是一个偶数阶的矩阵时没有矩阵中心元素,但是奇数阶矩阵有,语句如下

if(n%2==1)

juzhen[(n-1)/2][(n-1)/2]=sum++;

最后对数组进行输出

for(i=0;i<=n-1;i++)

for(j=0;j<=n-1;j++)

{

printf("%4d",juzhen[i][j]);

if(j==n-1)

printf("\n");

}

完整源代码如下

#include

#include

int main()

{

int i,j,n,sum;

printf("请输入矩阵的行列长度:\n");

scanf("%d",&n);

int juzhen[n][n];

memset(juzhen,0,sizeof(juzhen));

sum=1;

for(i=0;i

{

for(j=0;j

{

if(juzhen[i][j]==0)

juzhen[i][j]=sum++;

}

for(j=i;j

{

if(juzhen[j][n-1-i]==0)

juzhen[j][n-1-i]=sum++;

}

for(j=n-i-1;j>i;j--)//向左

{

if(juzhen[n-1-i][j]==0)

juzhen[n-1-i][j]=sum++;

}

for(j=n-1-i;j>i;j--)//向上

{

if(juzhen[j][i]==0)

juzhen[j][i]=sum++;

}

}

if(n%2==1)

juzhen[(n-1)/2][(n-1)/2]=sum++;

for(i=0;i<=n-1;i++)

for(j=0;j<=n-1;j++)

{

printf("%4d",juzhen[i][j]);

if(j==n-1)

printf("\n");

}

}

示例如下:

请输入矩阵的行列长度:

15

1  2  3  4  5  6  7  8  9  10  11  12  13  14  15

56  57  58  59  60  61  62  63  64  65  66  67  68  69  16

55 104 105 106 107 108 109 110 111 112 113 114 115  70  17

54 103 144 145 146 147 148 149 150 151 152 153 116  71  18

53 102 143 176 177 178 179 180 181 182 183 154 117  72  19

52 101 142 175 200 201 202 203 204 205 184 155 118  73  20

51 100 141 174 199 216 217 218 219 206 185 156 119  74  21

50  99 140 173 198 215 224 225 220 207 186 157 120  75  22

49  98 139 172 197 214 223 222 221 208 187 158 121  76  23

48  97 138 171 196 213 212 211 210 209 188 159 122  77  24

47  96 137 170 195 194 193 192 191 190 189 160 123  78  25

46  95 136 169 168 167 166 165 164 163 162 161 124  79  26

45  94 135 134 133 132 131 130 129 128 127 126 125  80  27

44  93  92  91  90  89  88  87  86  85  84  83  82  81  28

43  42  41  40  39  38  37  36  35  34  33  32  31  30  29

47f31201bf5ff1656be1b934384f1fcd.png

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值