一、输出N*N列蛇形数,如
#include<stdio.h>
#define N 10
int main()
{
int a[N][N]={0};//初始化全为0
int data=1;
for(int i =0, j =0, k =0; k <(N+1)/2; k++)//i为行,j为列,k为圈数
{
while(j<N-k)//控制圈数, 首先赋值第一圈(k=0)第一行,一共N列,减去圈数,即为列尾+1列
{
a[i][j]=data;//赋值
j++;//往右边移动
data++;
}
j--;//退回,while(1)循环后,j=N-k;因为j从0开始,所以一共有N-k-1列,所以要往回退一列,即j--
i++;//转向,接着对第一圈(k=0)第N-1列赋值
while(i<N-k)//同上,i最大值为N-k-1
{
a[i][j]=data;
i++;
data++;
}
i--;//退回
j--;//转向
while(j>k-1)//当k=0时,j最小为0;当k=1时,j最小为1;。。。所以j>k-1
{
a[i][j]=data;
j--;
data++;
}
j++;//退回
i--;//转向
while(i>k)//当k=0时,i最小为1;当k=1时,i最小为2;。。。所以i>k
{
a[i][j]=data;
i--;
data++;
}
i++;//退回
j++;//转向
}
for(int i =0; i < N;++i)
{
for(int j =0; j < N;++j)
{
printf("%3d", a[i][j]);
}
printf("\n");
}
return0;
}
#include<stdio.h>
#define N 100
int main()
{
int n,data=1;
scanf("%d",&n);
int a[N][N]={0};
for(int i=0,j=n-1,k=0; k<(n+1)/2; k++)//K循环层数
{
while(i<n-k)
{
a[i][j]=data;
i++;
data++;
}
i--;
j--;
while(j>k-1)
{
a[i][j]=data;
j--;
data++;
}
j++;
i--;
while(i>k-1)
{
a[i][j]=data;
i--;
data++;
}
i++;
j++;
while(j<n-k-1)
{
a[i][j]=data;
j++;
data++;
}
j--;
i++;
}
for(int i =0; i < n;++i)
{
for(int j =0; j < n;++j)
{
printf("%3d ", a[i][j]);
}
printf("\n");
}
return 0;
}
原文:http://www.cnblogs.com/moon-future/p/4903104.html