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

    题目描述 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
     

    分类标签 Tags 

    一定要注意 :这道题一开始走的方向是 fx=1 ;

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 
     6 using namespace std;
     7 
     8 int n,lastnum,sum,num=1;
     9 int jz[101][101];
    10 int fx;//代表此时走的方向 
    11 
    12 void con(int nx,int ny)
    13 {
    14     fx=1;
    15     memset(jz,0,sizeof(jz));
    16     jz[nx][ny]=1;
    17     while(num<lastnum)
    18     {
    19         if(fx==0)//向右走 
    20         {
    21             nx++;
    22             jz[nx][ny]=++num;
    23             if(jz[nx][ny+1]==0)
    24             {
    25                 fx=1;//转变为向上走 
    26             }
    27         }
    28         else if(fx==1)//向上走
    29         {
    30             ny++;
    31             jz[nx][ny]=++num;
    32             if(jz[nx-1][ny]==0)
    33             {
    34                 fx=2;//转变为向左走 
    35             }
    36         }
    37         else if(fx==2)//向左走
    38         {
    39             nx--;
    40             jz[nx][ny]=++num;
    41             if(jz[nx][ny-1]==0)
    42             {
    43                 fx=3;//转变为向下走 
    44             }
    45         }
    46         else if(fx==3)//向下走
    47         {
    48             ny--;
    49             jz[nx][ny]=++num;
    50             if(jz[nx+1][ny]==0)
    51             {
    52                 fx=0;//转变为向右走 
    53             }
    54         }
    55     }
    56 }
    57 
    58 int main()
    59 {
    60     scanf("%d",&n);
    61     lastnum=n*n;
    62     int firstx=(n+1)/2;//因为n一定为奇数 
    63     int firsty=firstx;
    64     con(firstx,firsty);
    65     for(int i=1;i<=n;i++)
    66     {
    67         for(int j=1;j<=n;j++)
    68         {
    69             cout<<jz[i][j]<<" ";
    70         }
    71         cout<<endl;
    72     }
    73     for(int i=1;i<=n;i++)
    74     {
    75         for(int j=1;j<=n;j++)
    76         {
    77             if(i==j) sum+=jz[i][j];//位于对角线上点 点的特征
    78             if(i+j==n) sum+=jz[i][j];
    79         }
    80     }
    81     cout<<sum;
    82     return 0;
    83 }

    如果运气好也是错,那我倒愿意错上加错!

    ❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

  • 相关阅读:
    Fleury算法
    2012 MultiUniversity Training Contest 2
    高斯若尔当消元法(线性代数)
    hdu4307(最小割)
    hdu4305(生成树计数)
    hdu4318(最短路)
    hdu4309(网络流)
    hdu4313(生成树)
    生成树计数
    MYSQL 远程登录及常用命令
  • 原文地址:https://www.cnblogs.com/zxqxwnngztxx/p/6753080.html
Copyright © 2011-2022 走看看