zoukankan      html  css  js  c++  java
  • codevs 1160 蛇形矩阵

    1160 蛇形矩阵

     传送门

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 白银 Silver
     
     
     
    题目描述 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

    数据范围及提示 Data Size & Hint
     
    奉上代码:
     
    #include<bits/stdc++.h>
    
    #define N 100005
    #define ll long long
    #define RE register
    #define max(a,b) (a>b?a:b)
    
    using namespace std;
    
    void read(int &x){
        int flg=1;x=0;RE char ch=getchar();
        if(ch=='-') flg=-1;
        for(;ch>'9'||ch<'0';) ch=getchar();
        for(;ch<='9'&&ch>='0';ch=getchar()) x=x*10+ch-'0';
        x*=flg;
    }
    int n,a[105][105],tp,t,x,y,ans,k;
    int mx[4]={0,-1,0,1},
        my[4]={1,0,-1,0};
    int main()
    {
        read(n);
        k=tp=1;x=n/2+1;y=n/2+1;a[x][y]=tp;
        while(1){
            for(int i=1;i<=tp;i++){
                x+=mx[t];y+=my[t];
                a[x][y]=++k;
            }++t;
            if(t==2||t==4) tp+=1;
            if(t==4) t=0;
            if(x==n&&y==n+1) break;
        }for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                printf("%d ",a[i][j]);
                if(i==j||i+j==n+1) ans+=a[i][j];
            }printf("
    ");
        }printf("%d",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    Flask-SQLAlchemy
    with 与 上下文管理器
    使用@property
    C++:如何把一个int转成4个字节?
    尝试理解Flask源码 之 搞懂WSGI协议
    qt setData()和data()
    我使用过的Linux命令之sftp
    linux下如何使用sftp命令
    Linux环境下安装JDK
    CentOS 6.5 配置IP地址的三种方法
  • 原文地址:https://www.cnblogs.com/song-/p/8834923.html
Copyright © 2011-2022 走看看