博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift 打印回字形
阅读量:5249 次
发布时间:2019-06-14

本文共 2042 字,大约阅读时间需要 6 分钟。

下图是输入 n = 9时输出的回字形效果图

效果图

想法

  • 输出是正方形,N行N列,而且数字是从外圈到里圈递增加1。
  • 以一圈为一个基本单位,写一个方法实现
  • 递归调用上面的方法,直到到达最中间的位置。
  • 用一个二维数组存储数据,当N值固定了之后,数组的长度也就固定了

实现

整个过程是在一个struct 里面完成。

备注:如果遍历数组需要使用下标和数组元素,则用元组形式遍历

for (index,curItem) in array.enumerated()

  

struct的结构如下:

import Foundationstruct LoopTest {private var column : Int = 0private var printArray : [[Int]]//根据用户输入N值初始化,初始化时必须给所有的属性赋值init(arrayColumn: Int) {    column = arrayColumn    printArray = [[]]}//初始化二维数组private mutating func setPrintArray() {    //因为在init方法里面用[[]]的二维数组初始化,printArray已经有了第一个    //元素——空数组,所以这里是赋值,而不是添加。    let firstArray = Array(repeating: 0, count: column)    printArray[0] = firstArray    for _ in 1..
Int { //其中curItem == 0判断是否已经赋值 var currentItem = item //上横,取第round圈的最上面一行的数组 var array = printArray[round - 1] for (index,curItem) in array.enumerated() { if curItem == 0 { array[index] = currentItem currentItem = currentItem + 1 } } printArray[round - 1] = array //右竖 for index in round..

  

最后为了输出比较规矩,需要对数字进行添加空格占位符,根据当前数值与最大数值的长度差添加空格

//获取数值的长度private func getLength(item: Int) -> Int {    var index = item    var length = 0    repeat {        index = index / 10        length = length + 1    }while index >= 1    return length}//构造回字形二维数组private mutating func getArroundPrintArray() {    setPrintArray()    var index = 1    for i in 1...column {        index = setOneArround(round: i, item: index)    }}  //唯一的对外方法,打印回字形   mutating func printArround() {    getArroundPrintArray()    let length = getLength(item: column * column)    for i in 1...column {        let array = printArray[i - 1]        for item in array {            let spaceLength = length - getLength(item: item)            var space = ""            if spaceLength >= 1 {                for _ in 1...spaceLength {                    space += " "                }            }            print ("\(space)\(item)", terminator: " ")        }        print()    }    print()}

  

转载于:https://www.cnblogs.com/liseylee/p/6763118.html

你可能感兴趣的文章
[BZOJ 5323][Jxoi2018]游戏
查看>>
条件断点 符号断点
查看>>
Python Web框架Django (五)
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
UVA 10976 - Fractions Again?!
查看>>
Dreamweaver cc新版本css单行显示
查看>>
【android】安卓的权限提示及版本相关
查看>>
JavaScript可否多线程? 深入理解JavaScript定时机制
查看>>
IOS基础学习
查看>>
Java基础教程——网络基础知识
查看>>
Kruskal基础最小生成树
查看>>
浅谈算法和数据结构: 一 栈和队列
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>
图论-次短路求法
查看>>
What's New for Visual C# 6.0
查看>>
ExtJs学习笔记之ComboBox组件
查看>>
关于收费软件
查看>>
getopt_long
查看>>