美文网首页
1160 蛇形矩阵

1160 蛇形矩阵

作者: star_night | 来源:发表于2017-04-23 21:07 被阅读0次

    题目描述 Description

    小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和.

    输入描述 Input Description

    n(即n行n列)

    输出描述 Output Description

    n+1行,n行为组成的矩阵,最后一行为对角线数字之和

    样例输入 Sample Input

    3

    样例输出 Sample Output

    5 4 3
    6 1 2
    7 8 9
    25
    
    #include<stdio.h>
    int map[100][100];
    int main()
    {
      int way[4][2]={{0,1},{-1,0},{0,-1},{1,0}};
      int n;
      scanf("%d",&n);
      int x,y,n_way=0,i=1,j,sum=0;
      int k1=0,k2=1,k3=0;
      x=n/2,y=n/2;
      while(x+y!=2*(n-1)){
        map[x][y]=i;
        if(x==y||(x+y)==n-1)
        sum+=i;
        i++;
        x+=way[n_way][0];
        y+=way[n_way][1];
        k1++;
        if(k1==k2){
          k1=0;
          k3++;
          n_way++;
          n_way%=4;
        }
        if(k3==2){
          k2++;
          k3=0;
        }
      }
      map[x][y]=i;
      sum+=i;
      for(i=0;i<n;i++){
        for(j=0;j<n;j++){
          printf("%d ",map[i][j]);
        }
        printf("\n");
      }
      printf("%d\n",sum);
      return 0;
    }
    
    

    参考代码

    #include <stdio.h>
    #include <string.h>
    #define maxn 20
    int a[maxn][maxn];
    int main(int argc, const char * argv[]) {
        int n, x, y, tot = 0;
        scanf("%d",&n);
        memset(a, 0, sizeof(a));
        tot = a[x=0][y=n-1]=1;
        while (tot<n*n) {
            while(x+1<n && !a[x+1][y]) a[++x][y]=++tot;
            while(y-1>=0 && !a[x][y-1]) a[x][--y]=++tot;
            while(x-1>=0 && !a[x-1][y]) a[--x][y]=++tot;
            while(y+1<n && !a[x][y+1]) a[x][++y]=++tot;
        }
        for(x=0;x<n;x++){
            for(y=0;y<n;y++) printf("%3d",a[x][y]);
            printf("\n");
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:1160 蛇形矩阵

          本文链接:https://www.haomeiwen.com/subject/dmnyzttx.html