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;

    }

  • 相关阅读:
    expect 函数体 花括号
    bash 连接字符串
    Ubuntu下搭建Python开发环境
    expect
    >&2
    expect语法基础: while、for 循环、if 语句的用法示例
    bash exit
    python开发工具
    eclipse中安装adt出现了duplicate location错误怎样解决
    shell source
  • 原文地址:https://www.cnblogs.com/csgc0131123/p/5290521.html
Copyright © 2011-2022 走看看