zoukankan      html  css  js  c++  java
  • 17.蛇形矩阵(模拟)

    时间限制: 1 s

     空间限制: 128000 KB

     题目等级 : 白银 Silver

    题解

    题目描述 Description

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

    输入描述 Input Description

    n(即nn列)

    输出描述 Output Description

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

    样例输入 Sample Input

    3

    样例输出 Sample Output

    5 4 3
    6 1 2
    7 8 9
    25

    数据范围及提示 Data Size & Hint

    分类标签 Tags 点此展开 

    思路:和原来的一样由外向里填数,因为n是奇数,所以从右下角开始,(偶数从左上角开始),

    代码:

    #include

    #include

    #include

    using namespace std;

    #define maxn 101

    int a[maxn][maxn],tot=0,n,x,y;

    long long sum=0;

    void ts();

    void sc();

    int main()

    {

           scanf("%d",&n);

           tot=n*n;

           x=n;y=n;

           a[n][n]=tot;//nn开始是因为输入一定是奇数

           ts();

           sc();

           return 0;

    }

    void sc()

    {

           for(int i=1,j=1;i<=n&&j<=n;++i,++j)

           sum+=a[i][j];

           for(int i=1,j=n;i<=n&&j>=1;++i,--j)

           sum+=a[i][j];

           for(int i=1;i<=n;++i)

             {

             for(int j=1;j<=n;++j)

             printf("%-5d",a[j][i]);//五位向左对齐 ,注意输出是a[i][j]还是a[j][i]

             printf(" ");

          }

          printf("%d ",sum-1);//中间相交的那个一,不重复加

    }

    void ts()

    {

           while(tot>1)

           {

                  while(x-1>=1&&a[x-1][y]==0) a[--x][y]=--tot;//从总数开始向里面移动

                  while(y-1>=1&&!a[x][y-1]) a[x][--y]=--tot;//顺序是左,上,右,下的顺序

                  while(x+1<=n&&!a[x+1][y]) a[++x][y]=--tot;

                  while(y+1<=n&&!a[x][y+1]) a[x][++y]=--tot;

                 

           }

    }

    n>所在的高度储存下来

               if(a[i][2]!=0)

               h[a[i][2]]=h[i]+1;

           }

           for(int i=1;i<=n;++i)

           w[h[i]]++;//把每个高度的宽储存下来

           sort(h+1,h+n+1,cmp);//取宽度和高度最大的输出

           sort(w+1,w+n+1,cmp); 

           printf("%d %d",w[1],h[1]);

          

           return 0;

    }

  • 相关阅读:
    51 Nod 1068 Bash游戏v3
    51 Nod Bash 游戏v2
    51 Nod 1073 约瑟夫环
    UVA 12063 Zeros and ones 一道需要好好体会的好题
    51 Nod 1161 Partial sums
    2018中国大学生程序设计竞赛
    UVA 11971 Polygon
    UVA 10900 So do you want to be a 2^n-aire?
    UVA 11346 Possibility
    python with as 的用法
  • 原文地址:https://www.cnblogs.com/csgc0131123/p/5290519.html
Copyright © 2011-2022 走看看