前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2023-11-04:用go语言,如果n = 1,打印 1*** 如果n = 2,打印 1*** 3*** 2*** 如果n =

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

作者头像
福大大架构师每日一题
发布2023-11-06 17:43:32
1130
发布2023-11-06 17:43:32
举报

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

1***

如果n = 2,打印

代码语言:javascript
复制
      1***
      

3*** 2***

如果n = 3,打印

代码语言:javascript
复制
                1***
                
      3***    2***
      

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

如果n = 4,打印

代码语言:javascript
复制
                           1***
                           
                 3***    2***
                 
       4***    5***    6***
       

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完整代码如下:

代码语言:javascript
复制
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++
    }
}

在这里插入图片描述

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大体步骤如下:
  • go完整代码如下:
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档