• 2023-11-04:用go语言,如果n = 1,打印 1*** 如果n = 2,打印 1*** 3*** 2*** 如果n = 3,打印


    2023-11-04:用go语言,如果n = 1,打印

    1***

    如果n = 2,打印

          1***
    
    • 1

    3*** 2***

    如果n = 3,打印

                    1***
                    
          3***    2***
    
    • 1
    • 2
    • 3

    4*** 5*** 6***

    如果n = 4,打印

                               1***
                               
                     3***    2***
                     
           4***    5***    6***
    
    • 1
    • 2
    • 3
    • 4
    • 5

    10** 9*** 8*** 7***

    输入一个数n,表示有多少行,从1开始输出,

    奇数行输出奇数个数,奇数行正序,偶数行输出偶数个数,偶数行逆序

    每个数后面加*补满四位,中间空4个,第n行顶格输出。

    来自华为OD

    来自左程云

    答案2023-11-04:

    go代码用灵捷3.5编写,不需要修改。

    大体步骤如下:

    1.读取输入的整数 n 表示行数。

    2.初始化一个大小为 MAXN 的字节数组 space,用于存储打印结果。

    3.设置一个布尔变量 from,初始值为 true,用于判断当前是奇数行还是偶数行。

    4.进入循环,循环次数为 n:

    a.调用 fill 函数,传入 from、当前行的起始值 j、当前行的个数 i 和总列数 m。

    b.遍历 space 数组的前 m-4 个元素,打印出空格。

    c.打印换行符。

    d.将 from 取反,切换到下一行。

    5.fill 函数根据 from 的值,分别处理奇数行和偶数行:

    a.如果 from 为 true,即当前为奇数行,则从 m-number*8 开始倒序插入 j 个数字,并将起始值 start 自增。

    b.如果 from 为 false,即当前为偶数行,则从 m-8 开始顺序插入 j 个数字,并将起始值 start 自增。

    6.insert 函数根据当前数 cur 和插入位置 i 的关系,将数字插入到 space 数组中:

    a.根据 cur 的位数,计算出数字所占的位数 bit。

    b.初始化 offset 为 1。

    c.根据计算出的 offset 和 bit,逐个将数字插入到 space 数组中。

    d.将剩余位置补充为 *。

    最后,根据代码和描述的步骤分析,可以得出以下复杂度:

    • 时间复杂度:在循环中,每一次 fill 函数的时间复杂度为 O(n),insert 函数的时间复杂度为 O(1)。因此,总的时间复杂度为 O(n)。

    • 空间复杂度:除了输入和输出外,只使用了一个大小为 MAXN 的字节数组 space,因此额外的空间复杂度为 O(MAXN)。

    go完整代码如下:

    package main
    
    import (
    	"fmt"
    )
    
    const MAXN = 100001
    
    var space [MAXN]byte
    
    func main() {
    	var n int
    	fmt.Print("提醒,请输入n : ")
    	fmt.Scan(&n)
    
    	m := n * 8
    	for i := range space {
    		space[i] = ' '
    	}
    
    	from := true
    	for i, j := 1, 1; i <= n; i, j = i+1, j+i {
    		fill(from, j, i, m)
    		for _, ch := range space[:m-4] {
    			fmt.Printf("%c", ch)
    		}
    		fmt.Println()
    		from = !from
    	}
    }
    
    func fill(from bool, start, number, m int) {
    	if from {
    		for i, j := m-number*8, 1; j <= number; i, j = i+8, j+1 {
    			insert(start, i)
    			start++
    		}
    	} else {
    		for i, j := m-8, 1; j <= number; i, j = i-8, j+1 {
    			insert(start, i)
    			start++
    		}
    	}
    }
    
    func insert(cur, i int) {
    	end := i + 4
    	bit := 1
    	if cur > 9 {
    		bit++
    	}
    	if cur > 99 {
    		bit++
    	}
    	if cur > 999 {
    		bit++
    	}
    	offset := 1
    	for j := 1; j < bit; j++ {
    		offset *= 10
    	}
    	for offset > 0 {
    		space[i] = byte((cur/offset)%10 + '0')
    		offset /= 10
    		i++
    	}
    	for i < end {
    		space[i] = '*'
    		i++
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72

    在这里插入图片描述

  • 相关阅读:
    Java语言级别8不支持本地枚举和语言级别 ‘8‘ 不支持 内部类中的 static 声明
    SpringBoot原理-自动配置-原理分析-@Conditional
    世界数字工厂的发展现状究竟如何?仅10%公司实施完成!
    文本处理三剑客之 sed 流编辑器(基础部分)
    第五周算法题
    【无标题】
    二、PHP函数
    Godot2D角色导航-自动寻路教程(Godot获取导航路径)
    Mysql
    APIcloud 【现已更名 用友开发中心】 iOS发版 应用程序请求用户同意访问相机和照片,但没有在目的字符串中充分说明相机和照片的使用。
  • 原文地址:https://blog.csdn.net/weixin_48502062/article/details/134224632