zoukankan      html  css  js  c++  java
  • ACM_螺旋填数

    螺旋填数

    Time Limit: 2000/1000ms (Java/Others)

    Problem Description:

    一天,小明在研究蜗牛的壳时,对其螺旋状的花纹感到十分有趣。于是他回到了家中,画出了一个螺旋花纹,但是他对这样的图案并不满意,他想要得到一个螺旋的n * n矩阵,于是他以1开始,顺时针螺旋地在螺旋花纹中填入一个数,保证这个数比上一个数大1,一直按照规则填直到填出一个n * n的矩阵为止。于是小明根据螺纹做出了以下的规则:螺旋填数由1开始,开始填入方向为右,然后向下,再向左,再向上填,循环此过程直到填出一个n * n的矩阵。
    

    Input:

    输入包含多组测试数据,每组测试数据输入一个整数n(1 ≤ n ≤ 50)

    Output:

    对于每组测试数据,输出满足上述规则的n * n的矩阵

    Sample Input:

    5

    Sample Output:

    21 22 23 24 25
    20 7 8 9 10
    19 6 1 2 11
    18 5 4 3 12
    17 16 15 14 13
    解题思路:简单找规律,如图所示。cnt初始值为1,每沿着两个方向填完cnt个数后,cnt++;注意每个循环要控制到m<=n*n;否则会覆盖原来的数据导致输出错误,还有要注意越界的情况。
    AC代码:
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int main(){
     4     int n,x,y,s[55][55],m,cnt,num;
     5     while(cin>>n){
     6         if(n%2)x=y=(n+1)/2;
     7         else x=y=n/2;
     8         m=1;s[x][y]=m++;cnt=1;
     9         while(m<=n*n){
    10             num=1;
    11             while(y<=n&&num<=cnt&&m<=n*n){if(y+1<=n)s[x][++y]=m++;num++;}
    12             num=1;
    13             while(x<=n&&num<=cnt&&m<=n*n){if(x+1<=n)s[++x][y]=m++;num++;}
    14             num=1;cnt++;
    15             while(y>=1&&num<=cnt&&m<=n*n){if(y-1>0)s[x][--y]=m++;num++;}
    16             num=1;
    17             while(x>=1&&num<=cnt&&m<=n*n){if(x-1>0)s[--x][y]=m++;num++;}
    18             cnt++;
    19         }
    20         for(int i=1;i<=n;++i)
    21             for(int j=1;j<=n;++j)
    22                 cout<<s[i][j]<<(j==n?"
    ":" ");
    23     }
    24     return 0;
    25 }
  • 相关阅读:
    java web(七)Cookie的简单使用
    java web(六)多个请求对应一个Servlet
    <十六>JDBC_使用 DBUtils 编写通用的DAO
    <十五>JDBC_使用 DBUtils 进行更新、查询操作
    附加作业
    第五周作业
    第八周作业
    第七周作业
    第一周作业
    第六周作业
  • 原文地址:https://www.cnblogs.com/acgoto/p/9169118.html
Copyright © 2011-2022 走看看