2023-11-04:用go语言,如果n = 1,打印 1*** 如果n = 2,打印 1*** 3*** 2*** 如果n = 3,打印
2023-11-04:用go语言,如果n = 1,打印
1***
如果n = 2,打印
1***
3*** 2***
如果n = 3,打印
1***
3*** 2***
4*** 5*** 6***
如果n = 4,打印
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完整代码如下:
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:用go语言,如果n = 1,打印 1*** 如果n = 2,打印 1*** 3*** 2*** 如果n = 3,打印的更多相关文章
- How to Write and Publish a Scientific Paper: 7th Edition(科技论文写作与发表教程)(11.04更新)
How to Write and Publish a Scientific Paper: 7th Edition(科技论文写作与发表教程)(11.04更新) 重要通知: 最近开题报告已差不多告一段落, ...
- 安装qt5.3.2后,qtcreator在ubuntu 11.04无法启动的问题
在官方网站下载.run文件安装后,qtcreator启动失败,然后找到命令行启动,失败原因如下: shr@shr-Sieyuan:~/Qt5.3.2/Tools/QtCreator/bin$ ./qt ...
- ubuntu 11.04 源 更新不了,全显示ign、404
原文地址:http://blog.csdn.net/enjio/article/details/11603373 ubuntu 11.04 源 更新不了 分类: 开发相关2013-09-12 14 ...
- ubuntu 11.04安装笔记
首先,本文查询了网络中各位大大的经验共享,特别是<UltraISO制作U盘启动Ubuntu 8.10 LiveCD>,地址在http://blog.sina.com.cn/s/blog_5 ...
- 怎么样ubuntu 64 11.04 在执行32位程序
上网一查非常多的信息,头发上的今天ubuntu 64 11.04 在执行32位程序安装ia32-libs包,可执行例如,下面的命令.但提示无法安装 apt-get install ia32-libs ...
- u盘安装ubuntu10.04 、11.04 server
10.04 先将 ubuntu server 的 iso 放到优盘上,然后在提示无法找到光驱时,按 alt+f2 打开一个新的 console 窗口,将 iso mount 上,具体操作如下: ls ...
- ubuntu 11.04 old sources.list
#deb cdrom:[Ubuntu 11.04 _Natty Narwhal_ - Release amd64 (20110427.1)]/ natty main restricted # See ...
- Ubuntu 10.10, 11.04, 11.10这三个版本无法从优盘启动
问题:Ubuntu 10.10, 11.04, 11.10这三个版本无法从优盘启动 解决:从U盘启动安装的时候,会卡住不动.搞定办法相当简单,修改syslinux/syslinuxfg文件:将defa ...
- 【转】ubuntu 11.04使用apt-get安装软件时一直提示E:unable to locate package
问题: VMware虚拟机安装了ubuntu 11.04,在使用apt-get安装软件时一直提示E:Unable to locate package. 百度了原因,说是要更新源,使用命令:sudo a ...
- Ubuntu 11.04 (Natty) 已经停止支持 但可以使用old-releases源了
Ubuntu 11.04 (Natty) 已经停止支持,但可以使用old-releases源了,先备份源列表文件: sudo cp /etc/apt/sources.list /etc/apt/sou ...
随机推荐
- Blackmail
Blackmail Arthur Hailey The chief house officer, Ogilvie, who had declared he would appear at the Cr ...
- nacos-mysql.sql
https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql # Nacos安装 /home/nacos ...
- Java虚拟机(JVM):第六幕:自动内存管理 - 选择合适的垃圾收集器
前言:在虚拟机的世界里面,内置了很多的垃圾收集器,但并不是说最先进的就是最好的.有一句话说的好"因地制宜": 一.Epsilon收集器 是一个无操作的收集器,但是贴切的来说是&qu ...
- 惊奇!Android studio内部在调用Eclipse
现在用Android studio的人越来越多,主要是说谷歌不再支持Eclipse,而力推Android studio.但是as也太不给力了,我之前写过一篇博客提到. 今天要说的是一个惊天的消息,如题 ...
- CF1707B [Difference Array]
Problem 题目简述 设序列 \(a\) ,并且是单调递增的.设 \(a\) 当前长度为 \(l\),你要对 \(a\) 作差分,即令 \(b_i = a_{i+1} - a_i(1\le i & ...
- 聊聊Transform模型
摘自<BERT基础教程:Transformer大模型实战 > 概述 循环神经网络和长短期记忆网络已经广泛应用于时序任务,比如文本预测.机器翻译.文章生成等.然而,它们面临的一大问题就是如何 ...
- 【日常收支账本】【Day05】编辑账本界面增加删除、更新记录功能——提高代码复用性
一.项目地址 https://github.com/LinFeng-BingYi/DailyAccountBook 二.新增 1. 增加删除记录功能 1.1 功能详述 点击删除按钮后,获取对应行的数据 ...
- Kubernetes: kube-apiserver 之认证
kubernetes:kube-apiserver 系列文章: Kubernetes:kube-apiserver 之 scheme(一) Kubernetes:kube-apiserver 之 sc ...
- 🔥🔥Java开发者的Python快速进修指南:控制之if-else和循环技巧
简单介绍 在我们今天的学习中,让我们简要了解一下Python的控制流程.考虑到我们作为有着丰富Java开发经验的程序员,我们将跳过一些基础概念,如变量和数据类型.如果遇到不熟悉的内容,可以随时查阅文档 ...
- 又一个涵盖前后端+DevOps+OpenAI大模型的高并发项目启动了
大家好,我是冰河~~ 今天,正式通知大家一件事情:又到了启动新项目的时候,这也是 冰河技术 知识星球继 Seckill秒杀系统 项目后,又一个高并发实战项目.星球其他项目与专栏,大家可移步到冰河的个人 ...