69,369
社区成员
发帖
与我相关
我的任务
分享
1--2 9-10 25
| | | |
4--3 8 11 24
| | | |
5--6--7 12 23
| |
16-15-14-13 22
| |
17-18-19-20-21
for(int j=1;j<N+1;j++)
printf("%-5d",gh[i][j]);
printf("\n");
for(int j=1;j<N+1;j++)
printf("%2d ",gh[i][j]);//换成%2d就可以对齐了
printf("\n");
#include <stdio.h>
/*
思路:画完一层记录尾点,下次画时只有两种画法
1.下 右 上
2.右 下 左
测试成功!*/
#define N 4
struct _POINT
{
int x ;
int y;
int data;
};
struct _POINT end;
int drawaLay(int gh[][N+1],int n)//画一层
{
if(n==1)
{
end.x=1;
end.y=1;//第一次只能往右
end.data=1;
gh[1][1]=1;
return 0;
}
if((end.x+1)==n)//能否往右
{
gh[end.y][++end.x]=++end.data;//右
while(end.y<n)
gh[++end.y][end.x]=++end.data;//下
while(end.x>1)
gh[end.y][--end.x]=++end.data;//左
}
else if((end.y+1)==n)//能否往下
{
gh[++end.y][end.x]=++end.data;//下
while(end.x<n)
gh[end.y][++end.x]=++end.data;//右
while(end.y>1)
gh[--end.y][end.x]=++end.data;//上
}
return 0;
}
int draw(int gh[][N+1],int n)//画整个
{
for(int i=1;i<=n;i++)
drawaLay(gh,i);
return 0;
}
int main()
{
int gh[N+1][N+1];
draw(gh,N);
for(int i=1;i<N+1;i++)
{
for(int j=1;j<N+1;j++)
printf("%d ",gh[i][j]);
printf("\n");
}
}
#include <stdio.h>
template< int N >
void zip()
{
int a[N][N];
int number = 1;
a[0][0] = number++;
for( int i = 1; i < N; ++i )
{
if( i & 1 )
{
for( int j = 0; j < i + 1; ++j )
a[j][i] = number++;
for( int j = i - 1; j >= 0; --j )
a[i][j] = number++;
}
else{
for( int j = 0; j < i + 1; ++j )
a[i][j] = number++;
for( int j = i - 1; j >= 0; --j )
a[j][i] = number++;
}
}
for( int i = 0; i < N; ++i ){
for( int j = 0; j < N; ++j )
printf( "%4d" , a[i][j] );
printf( "\n" );
}
}
int main( int argc, int *argv[] )
{
zip< 20 >();
getchar();
return 0;
}
/*
思路:画完一层记录尾点,下次画时只有两种画法
1.下 右 上
2.右 下 左
本人无环境测试,见谅!*/
#define N 4
struct _POINT
{
int x ;
int y;
data;
}POINT;
POINT end;
int drawaLay(int gh[][],int n)//画一层
{
if(n==1)
{
end.x=1;
end.y=-1;//第一次只能往右
end.data=1;
return 0;
}
if((end.y+1)==n)//能否往下
{
gh[++end.y][end.x]=++end.data;//下
while(end.x<n)
gh[end.y][++end.x]=++end.data;//右
while(end.y>1)
gh[--end.y][end.x]=++end.data;//上
}
else if((end.x+1)==n)//能否往右
{
gh[end.y][++end.x]=++end.data;//右
while(end.y<n)
gh[++end.y][end.x]=++end.data;//下
while(end.x>1)
gh[end.y][--end.x]=++end.data;//左
}
return 0;
}
int draw(int gh[][],int n)//画整个
{
for(int i=1;i<=n;i++)
drawaLay(gh,i);
return 0;
}
int main()
{
int gh[N+1][N+1];
draw(gh,N);
for(int i=1;i<N+1;i++)
for(int j=1;j<N+1;j++)
printf("%d ",gh[i][j]);
printf("\n");
}