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
  • 相关阅读:
    shell读取文件不改变文本格式
    lua 的 os.date os.time
    gerrit 操作
    docker 的 镜像生成系列
    Windows 跟 Linux 文件共享:Samba 设置
    viscode 使用 格式的配置
    python pip 升级 或者换源
    centos 的系统管理命令 service systemctl
    Linux 的 netstat 命令
    MVC 、MTV 模式
  • 原文地址:https://www.cnblogs.com/song-/p/8834923.html
Copyright © 2011-2022 走看看