蛇形填数

来源:互联网 发布:小佳娱乐网源码 编辑:程序博客网 时间:2024/05/23 19:14

蛇形填数

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入
直接输入方陈的维数,即n的值。(n<=100)
输出
输出结果是蛇形方陈。
样例输入
3

样例输出

7 8 1

6 9 2

5 4 3




这个问题是让我们像蛇一样转圈填数的,所以这里一圈为一次循环,在这个循环里,右边,下边,左边,上边 每一条边又是一个简单的循环

for(d=0;d<=(n-1)/2;d++)                                          确定循环数,即圈数,一个数亦可以视为一圈    {        while(y+1<n && a[x][y+1]==0)                              上边,为0的才需要填数,填过的不用再填            a[x][++y]=++sum;        while(x+1<n && a[x+1][y]==0)                              右边                                  a[++x][y]=++sum;        while(y-1>=0 && a[x][y-1]==0)                             下边            a[x][--y]=++sum;        while(x-1>=0 && a[x-1][y]==0)                             左边            a[--x][y]=++sum;    }


然后再用一个嵌套循环输出这个二维数组即可~~

#include <stdio.h>int main(){    int a[102][102]={0},n,x=0,y,sum=1,d=0;    scanf("%d",&n);    y=n-1;    a[x][y]=1;    for(d=0;d<=(n-1)/2;d++)    {        while(y+1<n && a[x][y+1]==0)            a[x][++y]=++sum;        while(x+1<n && a[x+1][y]==0)            a[++x][y]=++sum;        while(y-1>=0 && a[x][y-1]==0)            a[x][--y]=++sum;        while(x-1>=0 && a[x-1][y]==0)            a[--x][y]=++sum;    }    for(x=0;x<n;x++)    {        for(y=0;y<n;y++)            printf("%6d",a[x][y]);        printf("\n");    }}



0 0