一、输出N*N列蛇形数,如


#include<stdio.h>#define N 10int main(){int a[N][N]={0};//初始化全为0int 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 100int 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