IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 算法做题打卡:1 -> 正文阅读

[数据结构与算法]算法做题打卡:1

每日算法题

csdn算法技能树,基础1-5

1.切面条

一根高筋拉面,中间切一刀,可以得到2根面条。

如果先对折1次,中间切一刀,可以得到3根面条。

如果连续对折2次,中间切一刀,可以得到5根面条。

那么,连续对折10次,中间切一刀,会得到多少面条呢?

tips: 这题,看一眼答案就会了。但不懂如何找这种规律,推了几次都不对,或许这种得多做看经验吧。

答案(golang实现):

n, sum, t := 10, 2, 1
for i := 1; i < n; i++ {
    sum += t
    t *= 2
}
fmt.Printf("对折10次会得到%d个面条", sum)
//  折10次会得到513个面条

2.大衍数列

中国古代文献中,曾记载过大衍数列, 主要用于解释中国传统文化中的太极衍生原理。

它的前几项是:0、2、4、8、12、18、24、32、40、50 …

其规律是:对偶数项,是序号平方再除2,奇数项,是序号平方减1再除2。

代码打印出大衍数列的前 100 项。

通过i%2是否为零来判断奇偶。余2为0i项为i*i/2,否则为:(i*i-1)/2

答案(golang实现):

for i := 1; i < 100; i++ {
    if i&2 == 0 {
        fmt.Printf("第%d项为:%d", i, i*i/2)
    } else {
        fmt.Printf("第%d项为:%d", i, (i*i-1)/2)
    }
}

3.门牌制作

小蓝要为一条街的住户制作门牌号。

这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。

小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个字符 0,2 个字符 1,1 个字符 7。

请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?

tips: 拿到一个门牌号后,直接余10可以得到最后一位树,如果等于2,所需字符加一。每次除10舍掉最后一位,直到拆解完所有位(门牌号被除的小于0)

答案(golang实现):

count := 2020
ans := 0
for i := 1; i <= count; i++ {
    x := i
    for x > 0 {
        if x%10 == 2 {
            ans++
        }
        x /= 10gg
    }
}
fmt.Printf("要制作所有的 1 到 2020 号门牌,总共需要%d个字符 2", ans)
// 要制作所有的 1 到 2020 号门牌,总共需要624个字符 2

4.方阵转置

给定一个n×m矩阵相乘,求它的转置。其中1≤n≤20,1≤m≤20,矩阵中的每个元素都在整数类型(4字节)的表示范围内。

tips: 即方阵顺时针旋转90度。x轴反向和y轴方向倒换

m, n := 20, 20
	var a [20][20]int
// 初始化方阵
	for i := 0; i < m; i++ {
		for j := 0; j < n; j++ {
			a[i][j] = j
		}
	}
	fmt.Print("原数组")
	fmt.Println(a)
	fmt.Println("反转后")
// 转置方阵
	for i := 0; i < m; i++ {
		for j := 0; j < n; j++ {
			fmt.Print(a[j][i])
		}
        // 换个行
		fmt.Println()
	}

5.微生物增殖

假设有两种微生物 X 和 Y

X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。

一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。

现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。

如果X=10,Y=90呢?

提示:

分析可知,Y分别会在0.5,1.5,2.5······时被吃,所以,把60分钟分成120份,则在除以2余数为1时,Y的数目减少X个

tips:一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。这句话其实算干扰项了。这里我思索了很久,画图一看便知。其他条件比较简单,直接余即可

缩小一下研究对象,看看如果 只有一个x的情况 。如下:

请添加图片描述

答案(golang实现):

func demo5func(x, y int) {
	fmt.Printf("x=%d,y=%d,60分钟后,y的数目为:", x, y)
	for i := 0; i < 120; i++ {
		if i%2 == 1 {
			y -= x
		}
		if i%4 == 0 {
			y *= 2
		}
		if i%6 == 0 {
			x *= 2
		}
	}
	fmt.Println(y)
}

demo5func(10, 89)
demo5func(10, 90)
/*
x=10,y=89,60分钟后,y的数目为:-979369984
x=10,y=90,60分钟后,y的数目为:94371840
*/
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:31:56  更:2022-04-27 11:32:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:57:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码