先上自己写的代码
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int limit;
long count = 1;
int k = 0;
int b = 0;
int j = 0;
int c = 1;
int e = 1;
int f = 0;
int h = 1;
int m = 2;
int p = 0;
int n;
printf("请输入矩形的边长:\n");
scanf("%d",&limit);
n = limit - 1;
long canva[limit][limit];
while(count != (limit * limit))
{
for(int i = j; i < limit - k; i++)//向右打印横行
{
canva[j][i] = count++;
}
j++;
k++;
for(int a = c;a <= (n - b); a++)// 向下打印竖行
{
canva[a][n-b] = count++;
}
c++;
b++;
for(int d = limit - e-1; d >=f ; d--)//反向打印横行
{
canva[limit-e][d] = count++;
}
f++;
e++;
for(int g = limit - m; g >=h ; g--)//向上打印竖行
{
canva[g][p] = count++;
}
h++;
p++;
m++;
}
for(int z = 0; z < limit; z++)//输出数组
{
for(int v = 0; v < limit; v++)
{
printf("%5d",canva[z][v]);
if( (v+1) % limit == 0)
putchar('\n');
}
}
putchar('\n');
system("pause");
return 0;
}
先不说这么写有多麻烦,我只想大神帮我看一下逻辑对不对,因为我在纸上
写了感觉是对的,但运行结果总不对,而且只有奇数才能跳出循环,输入偶数
的话就打印不出来
下面是运行结果
这个是奇数
下一个输入偶数打印不出来,循环跳不出来