简单的解析下螺旋数组

先简要的讲下思路: 螺旋数组因为数组的排列像一个海螺所以就被称作螺旋数组(讲点废话,这个是我杜撰的)大体的形状就如图片所显示的,那好下面我们就开始画圈圈,每一圈可以看作四步:第一 先把上面的边画出来,第二 把右边的边画出来, 第三 把下边的边画出来 ,第四  把左边的边画出来。画玩第一个圈,接着画里面的一个圈,第一。。。第二 。。第四。。画完之后去里面没有圈了。然后再画里面的里面的圈,直到画不动了(超出了数组的最大索引量)再停下来;嗯 思路就是这么个思路,下面是贴代码的时候:

 1    static void Main(string[] args)
 2         {
 3             Console.WriteLine("请输入大于1的正整数:");
 4             int n = 0;
 5             try
 6             {
 7                 string read = Console.ReadLine();
 8
 9                 n = Int32.Parse(read);
10
11                 if (n <= 1)
12                 {
13                     Console.WriteLine("请输入正确的正整数:");
14                 }
15             }
16             catch
17             {
18                 Console.WriteLine("请输入正确的正整数:");
19             }
20
21
22             byte[,] b = new byte[n, n];
23
24             byte result = 1; //输出的起始结果为1
25
26             int itemN = n - 1; //要输出多少条线
27
28             for (int m = 0; m < n / 2f; m++)
29             {
30                 if (itemN > 0)
31                 {
32                     //输出顶线
33                     for (int i = 0; i < itemN; i++)
34                     {
35                         b[m, i + m] = result;
36                         result++;
37                     }
38                     //输出右边线
39                     for (int i = 0; i < itemN; i++)
40                     {
41                         b[i + m, itemN + m] = result;
42                         result++;
43                     }
44                     //输出底线
45                     for (int i = itemN; i > 0; i--)
46                     {
47                         b[itemN + m, i + m] = result;
48                         result++;
49                     }
50                     //输出左线
51                     for (int i = itemN; i > 0; i--)
52                     {
53                         b[i + m, m] = result;
54                         result++;
55                     }
56                     //减去两条线
57                     itemN -= 2;
58                 }
59                 else
60                 {
61                     b[m, m] = result;
62                 }
63             }
64
65             for (int i = 0; i < n; i++)
66             {
67                 Console.WriteLine();
68                 for (int j = 0; j < n; j++)
69                 {
70                     Console.Write(b[i, j].ToString().PadRight(10));
71                 }
72             }
73             Console.Read();

以上是看到一道面试题感觉有点意思于是研究了下。因最近在学习写邮件,发现自己文笔与表达太差。所以就写下此文,以锻炼文笔。即当作练习,也当作以后鄙视现在的证据。大家如果感觉幼稚请轻喷

时间: 2024-10-28 16:00:07

简单的解析下螺旋数组的相关文章

PHP实现螺旋矩阵(螺旋数组)

今天碰到一个比较有意思的问题, 就是把A到Y这25个字母以下面的形式输出出来 A B C D E P Q R S F O X Y T G N W V U H M L K J I 问题很有意思,就是转圈圈把字母填到表格中,要输出这样的格式,其实就需要构造一个下面这样的表格 1 2 3 4 5 16 17 18 18 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 这其实是一个螺旋矩阵的问题, 这跟下面这个问题本质是一样的: 给定一个行数row和列数cols,

Android View系统解析(下)

转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/38426471(来自singwhatiwanna的csdn博客) Android View系统解析系列: Android View系统解析(上) 介绍View的基础知识.View的滑动.弹性滑动.滑动冲突解决方式.事件分发等 Android View系统解析(下) 介绍View的Framework层原理.View的measure / layout / draw三大流程和一些高

Java 螺旋数组的实现方式-一个循环实现哦

随着编程的学习和工作,感触越来越深的,就是如何做好对需求的理解.那么在学习的过程中,就是如何将一个实际问题,转化成计算机语言去实现.我觉得我的这方面的能力很是欠缺啊. 今天分享一下一个螺旋数组例子的分析: 贴上code: package excesize; /* * 螺旋数组: * 4 * 1 2 3 4 * 12 13 14 5 * 11 16 15 6 * 10 9 8 7 */ public class LuoxuanArray { public static void main(Stri

解析、查找数组中重复出现的元素(Java)

 解析.查找数组中重复出现的元素,Java实现. <数据结构与算法分析:解析.查找数组中重复出现的元素> 问题描述:一个结构化数据,假设事先按照某种顺序排好序(比如升序)的一个数组中,无规则.重复出现若干次某个相同元素,形如有序数组data: data = {  "A", "A", "B", "C", "C", "D", "D" , "D&q

用java实现螺旋数组

接收数组的行数和列数,返回正序和倒序的螺旋数组 package cn.baokx; public class Test { public static void main(String[] args) { printArray(getSpiralArray(5,5,false)); System.out.println("**************"); printArray(getSpiralArray(5,5,true)); } //打印二维数组 public static vo

探究JS V8引擎下的“数组”底层实现

本文首发于 vivo互联网技术 微信公众号? 链接:https://mp.weixin.qq.com/s/np9Yoo02pEv9n_LCusZn3Q 作者:李超 JavaScript 中的数组有很多特性:存放不同类型元素.数组长度可变等等,这与数据结构中定义的数组结构或者C++.Java等语言中的数组不太一样,那么JS数组的这些特性底层是如何实现的呢,我们打开V8引擎的源码,从中寻找到了答案.V8中对数组做了一层封装,使其有两种实现方式:快数组和慢数组,快数组底层是连续内存,通过索引直接定位,

简单的介绍下WPF中的MVVM框架

最近在研究学习Swift,苹果希望它迅速取代复杂的Objective-C开发,引发了一大堆热潮去学它,放眼望去各个培训机构都已打着Swift开发0基础快速上手的招牌了.不过我觉得,等同于无C++基础上手学习C#一样,即使将来OC被淘汰,那也是N年之后的事情,如果真的要做IOS开发,趁现在Swift才刚开始,花那么几个月去了解一下OC绝对是一件有帮助的事情. 扯远了,我前几天刚接触到一个叫做mvvm的框架,发现很有意思,带着学习的态度来写点东西,不足之处一起研究.还有一个很重要的原因,我发现不少同

SQL Server SQL性能优化之--数据库在“简单”参数化模式下,自动参数化SQL带来的问题

数据库参数化的模式 数据库的参数化有两种方式,简单(simple)和强制(forced),默认的参数化默认是“简单”,简单模式下,如果每次发过来的SQL,除非完全一样,否则就重编译它(特殊情况会自动参数化,正是本文想说的重点)强制模式就是将adhoc SQL强制参数化,避免每次运行的时候因为参数值的不同而重编译,这里不详细说明. 这首先要感谢“潇湘隐者”大神的提示, 当时也是遇到一个实际问题, 发现执行计划对数据行的预估,怎么都不对,有观察到无论怎么改变参数,SQL语句执行前都没有重编译,疑惑了

基于modelsim-SE的简单仿真流程—下

基于modelsim-SE的简单仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile All是编译所有文件,这里选择 Compile->Compile All,如下图所示: 在脚本窗口中将出现绿色字体: # Compile of counter.v was successful. # Compile of counter_tst.v was successful.,说明文件编译成功,在