#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#undef EOF
#define EOF -1
#define SIZE 10
int a[SIZE][SIZE];
int main(int argc,char *argv[])
{
int dim=atoi(argv[1]);
int cirle = dim%2==0 ? dim/2 : dim/2+1; //找到需要转的圈数
int i,j; //控制循环
int left_up,right_down; //左上角和右下角的坐标
int number=0;
// left_up=0;
// right_down=dim-1;
int index;
for(index=0;index<cirle;index++) ///所转的方环数
{
left_up=index; //确定坐标 每次一个方环 都变
right_down=dim-left_up-1; //非常重要
//left>righ
for(i=left_up,j=left_up;j<=right_down;j++)
a[i][j]=++number;
//left_up>right_down
for(i=left_up+1,j=right_down;i<=right_down;i++)
a[i][j]=++number;
//right>left
for(i=right_down,j=right_down-1;j>=left_up;j--)
a[i][j]=++number;
//down>up
for(i=right_down-1,j=left_up;i>=left_up+1;--i)
a[i][j]=++number;
}
for(i=0;i<dim;++i)
{
for(j=0;j<dim;++j)
printf("%5d ",a[i][j]);
printf("\n");
}
system("pause");
return 0;
}//重点在于记录左上角和右下角的坐标,并且每次循环方环时,坐标会改变
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#undef EOF
#define EOF -1
#define SIZE 10
int a[SIZE][SIZE];
//判断行号 如果为偶数,正序输入 如果为奇数,逆序输入
int main(int argc,char *argv[])
{
int dim=atoi(argv[1]);
//int cirle = dim%2==0 ? dim/2 : dim/2+1; //找到需要转的圈数
int i,j; //控制循环
int left_up,right_down; //左上角和右下角的坐标
int number=0;
left_up=0;
right_down=dim-1;
int index;
for(index=0;index<dim;index++)
{
if(index%2==0)
{
for(i=index,j=left_up;j<=right_down;j++)
a[i][j]=++number;
}
else
{
for(i=index,j=right_down;j>=left_up;j--)
a[i][j]=++number;
}
}
for(i=0;i<dim;++i)
{
for(j=0;j<dim;++j)
printf("%5d ",a[i][j]);
printf("\n");
}
顺时针的输出结果
蛇形的输出结果