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代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x,y,s[][],m,cnt,num;
while(cin>>n){
if(n%)x=y=(n+)/;
else x=y=n/;
m=;s[x][y]=m++;cnt=;
while(m<=n*n){
num=;
while(y<=n&&num<=cnt&&m<=n*n){if(y+<=n)s[x][++y]=m++;num++;}
num=;
while(x<=n&&num<=cnt&&m<=n*n){if(x+<=n)s[++x][y]=m++;num++;}
num=;cnt++;
while(y>=&&num<=cnt&&m<=n*n){if(y->)s[x][--y]=m++;num++;}
num=;
while(x>=&&num<=cnt&&m<=n*n){if(x->)s[--x][y]=m++;num++;}
cnt++;
}
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
cout<<s[i][j]<<(j==n?"\n":" ");
}
return ;
}
ACM_螺旋填数的更多相关文章
- 螺旋填数:读入两个整数m,n,输出一个m行n列的矩阵,这个矩阵是1~m*n这些自然数按照右、下、左、上螺旋填入的结果。
package Day8_06; /*读入两个整数m,n,输出一个m行n列的矩阵,这个矩阵是1~m*n这些自然数按照右.下.左.上螺旋填入的结果. * 例如读入数字4,5,则输出结果为: * 1 2 ...
- ACM 蛇形填数
蛇形填数 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为:10 11 12 19 16 1 ...
- nyoj 33 蛇形填数
蛇形填数 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为: 10 11 ...
- <蛇形填数>--算法竞赛 入门经典(第2版)- 3.1 数组 程序3-3 蛇形填数
蛇形填数: 在n×n方阵里填入1,2,....,n×n,要求填成蛇形.例如,n = 4 时方阵为: 10 11 12 1 9 16 13 2 8 15 14 3 7 ...
- java算法 蓝桥杯(题+答案) 方格填数
6.方格填数 (结果填空) 如下的10个格子 (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案 ...
- 蓝桥杯比赛javaB组练习《方格填数》
方格填数 如下的10个格子 +--+--+--+ | | | |+--+--+--+--+| | | | |+--+--+--+--+| | | |+--+--+--+ ( ...
- 第七届C/C++B-方格填数 DFS
方格填数 如下的10个格子 +--+--+--+ | | | | +--+--+--+--+ | | | | | +--+--+--+--+ | | | | +--+- ...
- 第七届 蓝桥杯 方格填数 dfs
如下的10个格子 填入0~9的数字.要求:连续的两个数字不能相邻. (左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数. 注意:你提交的应该是一个整数,不要填写任何 ...
- 使用java实现快速排序(挖坑填数法和指针交换法)
快速排序:通过一趟排序,将数据分为两部分,其中一部分中的所有数据比另外一部分的所有数据要小,然后按照此方法,分别对这两部分进行排序,达到最终的排序结果. 每趟排序选取基准元素,比该基准元素大的数据放在 ...
随机推荐
- 汇编:MSR/MRS/BIC指令
1.MRS指令MRS指令的格式为:MRS{条件} 通用寄存器,程序状态寄存器(CPSR或SPSR)MRS指令用于将程序状态寄存器的内容传送到通用寄存器中.该指令一般用在以下两种情冴: Ⅰ.当需要改 ...
- table案例一
实现效果: html <style> #mform{ margin: 10px; } #mtable{ border-collapse: collapse; } #mtable thead ...
- linux虚拟主机的三种方法
虚拟主机虚拟主机是将一台(或者一组)服务器的资源(系统资源.网络带宽.存储空间等)按照一定的比例分割成若干相对独立的“小主机”的技术.每一台这样的“小主机”在功能上都可以实现WWW.FTP.Mail等 ...
- Python 内置函数 day4
import random s = 'abczfg' st= {3,4,9,1,8} print(dir(random))#打印模块内的方法,输出模块/变量可以调用的方法 print(dir(s))# ...
- @Order
1.Spring 4.2 利用@Order控制配置类的加载顺序, 2.Spring在加载Bean的时候,有用到order注解. 3.通过@Order指定执行顺序,值越小,越先执行 4.@Order注解 ...
- koji
fedora koji https://koji.fedoraproject.org/koji/ centos cbs.centos.org/koji/
- LOJ——#6277. 数列分块入门 1
~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法——分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...
- Win32 线程同步
Win32 线程同步 ## Win32线程同步 ### 1. 原子锁 ### 2. 临界区 {全局变量} CRITICAL_SECTION CS = {0}; // 定义并初始化临界区结构体变量 {线 ...
- [TS-A1486][2013中国国家集训队第二次作业]树[树的重心,点分治]
首先考虑暴力,可以枚举每两个点求lca进行计算,复杂度O(n^3logn),再考虑如果枚举每个点作为lca去枚举这个点的子树中的点复杂度会大幅下降,如果我们将每个点递归考虑,每次计算过这个点就把这个点 ...
- A - Number Sequence
Given two sequences of numbers : a11, a22, ...... , aNN, and b11, b22, ...... , bMM(1 <= M <= ...