一个打印螺旋数的程序
看到博客园上有人发这个程序的练习,便自己也写了一个。
![](/assets/blank.gif)
![](/assets/blank.gif)
2 {
3 enum Direction { Right, Down, Left, Up }
4
5 [System.Diagnostics.DebuggerDisplay("({X},{Y})")]
6 struct Point
7 {
8 public int X;
9 public int Y;
10 }
11
12 public int Count { get; private set; }
13
14 int[,] numbers;
15 public ScremNumbers(int count)
16 {
17 this.Count = count;
18 numbers = new int[count, count];
19
20 Process();
21 }
22
23 void Process()
24 {
25 var point = new Point();
26 var direction = Direction.Right;
27
28 for (int i = 0; i < Count * Count; i++)
29 {
30 var nextPoint = NextPoint(point, direction);
31 if (this[nextPoint] != 0)
32 {
33 direction = NextDirection(direction);
34 nextPoint = NextPoint(point, direction);
35 }
36
37 this[point] = i + 1;
38 point = nextPoint;
39 }
40 }
41
42 public void Print()
43 {
44 var maxLength = (Count * Count).ToString().Length + 1;
45
46 for (int i = 0; i < Count; i++)
47 {
48 for (int j = 0; j < Count; j++)
49 {
50 Console.Write(numbers[j, i].ToString().PadRight(4));
51 }
52 Console.WriteLine();
53 }
54 }
55
56 Point NextPoint(Point point, Direction direction)
57 {
58 var nextPoint = point;
59 switch (direction)
60 {
61 case Direction.Right:
62 nextPoint.X++;
63 break;
64 case Direction.Down:
65 nextPoint.Y++;
66 break;
67 case Direction.Left:
68 nextPoint.X--;
69 break;
70 case Direction.Up:
71 nextPoint.Y--;
72 break;
73 default:
74 throw new InvalidOperationException();
75 }
76
77 return nextPoint;
78 }
79
80 Direction NextDirection(Direction direction)
81 {
82 return (Direction)(((int)direction + 1) % 4);
83 }
84
85 private int this[Point index]
86 {
87 get
88 {
89 if (index.X < 0 || index.X >= Count || index.Y < 0 || index.Y >= Count)
90 return -1;
91
92 return numbers[index.X, index.Y];
93 }
94
95 set { numbers[index.X, index.Y] = value; }
96 }
97 }
程序用的算法比较简单,是一种最直接的算法:不停的往前走,碰壁便转弯。总体感觉整体思路还比较清晰,这里记录一下。
转载于:https://www.cnblogs.com/TianFang/archive/2010/12/27/1918330.html
一个打印螺旋数的程序相关推荐
- 编写一个打印全年日历的程序
/* 判断闰年3 如果知道某年元月一日是星期几,能否在本程序的基础上, 编写一个打印全年日历的程序? */ #include <iostream> using namespace std; ...
- python 打印自己代码_如何编写一个打印自身源代码的程序
一个程序,在没有任何外部输入的情况下,打印自身的源代码,这类程序在英文里有一个专门的称呼,叫做Quine,之所以叫这个名字,是为了纪念美国哲学家及逻辑学家Willard Van Orman Quine ...
- Linux环境下编写一个shell程序,此程序的功能:随机生成一个1-100的数(答案)让用户猜
题目:编写一个shell程序,此程序的功能:随机生成一个1-100的数(答案)让用户猜,如果用户猜的数大于答案,则提示大了,如果用户猜的数小于答案,则提示小了.当用户猜对时提示:猜对了. #! /bi ...
- 程序实现:由给定几个数确定凸组合系数,组成一个给定的数
问题描述 给定几个数xix_ixi确定凸组合系数λi\lambda_iλi,组成一个给定的数xxx. ∑λixi=x\sum \lambda_ix_i=x∑λixi=x s.t.∑λi=1s. ...
- Java黑皮书课后题第6章:*6.15(金融应用:打印税表)程序清单3-5给出了计算税款的程序。使用下面的方法体编写一个计算税款的方法。使用这个方法编写程序,打印可征税人从50000到60000间隔
*6.15(金融应用:打印税表)程序清单3-5给出了计算税款的程序.使用下面的方法体编写一个计算税款的方法.使用这个方法编写程序 题目 题目描述 破题 程序清单3-5(非本题):代码不全 补充代码:编 ...
- 编写一个制造各种车辆的程序。包含三个类,具体要求如下: (1)基类Vehicle,包含轮子数和汽车自身重量两个属性,一个两参数的构造方法,一个显示汽车信息的方法; (2)小轿车类Car,增加载客数属性
一.题目描述 编写一个制造各种车辆的程序.包含三个类,具体要求如下: (1)基类Vehicle,包含轮子数和汽车自身重量两个属性,一个两参数的构造方法,一个显示汽车信息的方法: (2)小轿车类Car, ...
- 12.15有一种数叫回文数,正读和反读都一样,如12321便是一个回文数。编写一个程序,从命令行得到一个整数,判断该数是不是回文数
有一种数叫回文数,正读和反读都一样,如12321便是一个回文数.编写一个程序,从命令行得到一个整数,判断该数是不是回文数 package Text6;import java.util.Scanner; ...
- 有一种数叫回文数,正读和反读都一样,如12321便是一个回文数。编写一个程序,从命令行得到一个整数,判断该数是不是回文数。
package task08;import java.util.Scanner;/** 8.有一种数叫回文数,正读和反读都一样,如12321便是一个回文数.* 编写一个程序,从命令行得到一个整数,判断 ...
- matlab求点介数程序,matlab_bgl 一个很有用的计算网络中每个节点介数的程序,对 分析 Cloud Computing 云 266万源代码下载- www.pudn.com...
文件名称: matlab_bgl下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Others 文件大小: 2098 KB 上传时间: 2016-10-26 下载次数: 0 提 供 者 ...
最新文章
- 【ArrayList】为什么java.util.concurrent 包里没有并发的ArrayList实现?
- dp聚类算法_【深度】基于残差分析的混合属性数据聚类算法
- MATrICP论文解读
- ASP.NET ActionPack
- stm32 通用bootloader_stm32最简单的实现BootLoader
- js数组常用方法总结(包括ES6)
- js右下角广告[兼容]
- html调用eps,eps输出没有属性
- AWVS扫描器使用入门
- 全新开发萝卜影视源码金色版 视频影视系统APP源码
- 什么是噪声,白噪声,加性噪声,乘性噪声
- python while循环详解
- Excel教程: Excel的窗口冻结与拆分
- 安装UWP版网易云音乐
- 详解统计指标PV、IP、UV、VV
- Redis简介与基本使用
- 氚云徐平俊:低代码赛道热度陡升,今年增长目标200%
- 浙大版《C语言程序设计(第3版)》题目集
- JAVA 接口 验证哥特巴赫猜想
- 狸窝全能转换器安卓版_第三十二讲 如何运用“狸窝”剪辑视频
热门文章
- Spring Cloud Alibaba基础教程:支持的几种服务消费方式(RestTemplate、WebClient、Feign)
- Centos7安装tengine-2.3.2版本
- Qt 3D的未来展望
- AFIO时钟何时开启
- 浪潮NF5270M3 刷uefi_新零售浪潮中,开为科技利用刷脸支付帮门店“运营”人
- 编译linux-2.6.29内核,报错解决方法
- Cpp / 空指针对象调用函数的不同结果
- Cpp 对象模型探索 / 拷贝构造函数 和 赋值构造函数 的调用时机
- 用启明云端基于ESP32模块的开发板来快速了解天猫精灵
- 3 左右_3万左右电动迷你小汽车,3万左右电动迷你小汽车车型推荐