首页 > 其他分享 >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,打印

时间:2023-11-04 23:47:33浏览次数:34  
标签:11 04 space ++ 复杂度 打印 offset bit

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++
	}
}

在这里插入图片描述

标签:11,04,space,++,复杂度,打印,offset,bit
From: https://www.cnblogs.com/moonfdd/p/17810055.html

相关文章

  • 11.4 显哗
    你在看这篇鲜花的时候,你是安全的吗?早上胃疼请假一上午,成功打断了连续不知道多少天的早八模拟赛。很快我就能享受到单休了下午之前三班的同学以及跟他一起学化竞的双胞胎弟弟和另一个同学来找我,说数学建模竞赛缺一个人。(他俩在役情况未知)“肯定需要一个会编程的,然后你还学地......
  • NOIP 模拟赛 11~11
    模拟11A层联测24100+0+20+10=130ptsrk32T1签到题T2最大值的最小竟然没想到二分,退役吧。。爆搜所有路径不知道哪写挂了赛后被卡成零蛋。。。T3暴力枚举T4二维前缀差分暴力T1花菖蒲首先有解一定满足\(b\lea-2\)。当\(b=0\)时,可以想到构造菊花图。当\(b=a-2\)......
  • 2023.11.4——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.软考知识明日计划:学习......
  • 20211128《信息安全系统设计与实现》第五章学习笔记
    一、任务内容自学教材第5章,提交学习笔记(10分)1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核心是要求GPT:“请你以苏格拉......
  • 将语料文本写入数据库20231104
    importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;publicclassBaseDao{publicConnectionconn=null;publicPreparedStatementps=null;publicResultSetrs=null......
  • 考研数学笔记更新(2023年11月3日)
    奇函数必须关于原点斜对称(一般情况下奇函数在原点处都有定义)判断变上限积分函数是否在某点处可导的三种方法示例......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第九周学习总结
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学****知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • 20211325 2023-2024-1 《信息安全系统设计与实现(上)》第八周学习笔记
    202113252023-2024-1《信息安全系统设计与实现(上)》第八周学习笔记一、任务要求自学教材第5章,提交学习笔记(10分),评分标准如下:1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识......
  • openGauss学习笔记-114 openGauss 数据库管理-设置安全策略-设置帐号有效期
    openGauss学习笔记-114openGauss数据库管理-设置安全策略-设置帐号有效期114.1注意事项创建新用户时,需要限制用户的操作期限(有效开始时间和有效结束时间)。不在有效操作期内的用户需要重新设定帐号的有效操作期。114.2操作步骤以操作系统用户omm登录数据库主节点。使......
  • NOIP-11 收容报告
    T1判断是否存在一棵树,满足它有 \(a\) 个一度点和 \(b\) 个三度点,如果存在请给出一个节点数不超过 \(1000\)的构造,否则输出 。考场看了一个小时发现和第一种可以构造等量的一度电和三度电,第二种可以在不勾造三度电的情况下构造一度电,根据阳历六ans看出可惜没加......