【python】算法与数据结构例题分析

目录

算法与数据结构实验题 8.19 分智慧果

★实验任务

★数据输入

★数据输出

输入示例

输出示例

基本思路

代码实现

效果展示

算法与数据结构实验题 8.21 森林冰火人

★实验任务

★数据输入

★数据输出

输入示例

输出示例

基本思路

代码展示 

 效果展示


 

算法与数据结构实验题 8.19 分智慧果

★实验任务

老师准备把一筐智慧果分给班上的同学,第i个同学(从1开始编号)分到ai个智慧果。Bonez(编号为1)是个自私的人,如果他的智慧果数不是班上最多的(即存在某位同学的智慧果数大于他的智慧果数),他会悄悄把别的同学的智慧果放进自己的那堆里。请问他至少需要从其他同学那里拿多少个智慧果,才可以使自己的智慧果数是班上最多的?

★数据输入

输入第一行为正整数n

第二行为n个正整数a[1..n]。(0<=ai<=10^5)

60%的数据 1<=n<=100.

100%的数据1<=n<=100000

★数据输出

输出最少需要从别处拿的智慧果数。

输入示例

3
1 8 0

输出示例

4

基本思路

先排除数组中所有比my_list[0]小的数字,然后将数组排序一次,通过条件判断依次将最大元素减小并增大首项元素,并通过一系列条件判断出可能出现的特殊情况。当最大元素仍然大于首元素且最大元素和次大元素大小相同时,将最大元素弹出列表,并对每次首项元素的增加次数和移动次数作出变动,直到达到题目要求为之。tip:一开始弹出使用的是remove函数,发现debug时发现首元素被弹出(当首元素大小和-1号元素相等时),于是改为pop来进行弹出操作

代码实现

q=0
count=0
num=int (input())
my_list=[int (n) for n in input().split()]
for i in my_list:
    if i<my_list[0]:
        my_list.remove(i)
my_list.sort()
while my_list[0]<=my_list[-1]:
    while my_list[-1]>my_list[-2]:
        my_list[0]+=1
        my_list[-1]-=1
        count+=1
        if my_list[0]>my_list[-1]:
            break
        if my_list[0]+q<=my_list[-1]:
            my_list[0]+=q
            count+=q
        else:
            count+=(my_list[-1]-my_list[0]+1)
            my_list[0]+=(my_list[-1]-my_list[0]+1)
            break
    if my_list[0] > my_list[-1]:
        break
    my_list.pop()
    q += 1
    if len(my_list)==1:
        count+=1
        break
print(count)

效果展示

9a05a0392a5547159d5758d455dca3e0.png

764c6fe340b54136be1ff85de4087b75.png 

fcb7a5ee06ca42298dfe458ecf18a8a1.png 

 

算法与数据结构实验题 8.21 森林冰火人

★实验任务

火人喜欢堆雪人。

已知火人在接下来的N天中,每天早上都会堆一个大小为vi的雪人。

但是火人的温度太高了!每天晚上,所有已存在的雪人的体积都会由于融化而减少ti(若雪人体积不足ti,则雪人体积融化至0)。

问,每天融化的总体积为多少?

★数据输入

输入第一行为正整数N (1<=N<=10^5)

第二行为N个正整数vi (1<=vi<=10^5),代表每天堆的雪人的体积。

第三行为N个正整数ti (1<=ti<=10^5),表示每天雪人融化的体积。

对于80%的数据, 1<=N<=100

对于100%的数据, 1<=N<=10^5

★数据输出

输出N个整数,代表每天融化的体积。(整数间以空格分隔)

输入示例

3
10 10 5
5 7 2

输出示例

5 12 4

 

基本思路

遍历数组2,并通过条件判断出数组一中剩下的组是否能对当天融化的数量作出贡献,将贡献值加起来作为当天累计的融化量,输出完成后将count置0处理

 

代码展示 

count=0
i=0
num=int (input())
l1=[int (n) for n in input().split()]
l2=[int (n) for n in input().split()]
while i<num:
    for c in range(i+1):
        if l1[c]>=l2[i]:
            count+=l2[i]
            l1[c]-=l2[i]
        elif l1[c]>0:
            count+=l1[c]
            l1[c]=0
    if i:
        print('',end=' ')
    print(count,end='')
    count=0
    i += 1

 效果展示

e8348888c7254a39ae812cdee30eca2a.png

 bc0e0d8d31b5490abe3b96e9bb34f08a.png

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: Python算法设计与分析一书是由王硕编写的一本与Python算法有关的教材,主要涉及算法设计、分析和优化等方面的内容。这本书不仅涉及了一些基本的数据结构算法,还介绍了一些高级算法和复杂的数据结构处理方法。 在计算机科学的研究领域中,算法设计与分析是非常重要的一部分。这本书将这一领域的研究内容与Python编程语言有机地结合起来,使读者更容易理解算法工作原理和复杂度分析。 本书从基本算法设计思想、分治法、贪心算法、动态规划、图论等方面展开,结合Python语言的特点,提供了一些常用的编程策略,如递归思想、迭代思想等,并详细解释了相关算法数据结构的实现方法。 此外,本书所涉及的算法还包括一些高级算法,如字符串算法、几何算法、概率算法算法优化等,这些算法在计算机科学中应用广泛,具有重要意义。 总的来说,本书可以帮助读者深入理解算法数据结构,提高编程能力,对于计算机科学、程序员和算法研究人员来说都是一本非常实用的教材。 ### 回答2: 《Python算法设计与分析》是一本非常重要的书,是由王硕所著的,通过该书的学习,可以深入学习Python语言的基本知识,并且了解算法Python语言中的应用。 本书从基础的数据结构开始介绍,如排序和查找算法,然后逐渐涉及到高级算法。包括图形算法、动态规划算法、贪心算法等等。除此之外,本书涵盖了Python中经常使用的算法数据结构,包括列表、数组、链表、二叉树、哈希表、优先队列等,可谓全面细致。 王硕老师在书中不仅介绍了各种算法数据结构的实现方法,还重点讲述了算法的设计和分析过程。在算法设计中,老师用很形象的实例来说明,让读者更加容易理解。同时,他还提供了很多示例程序,并且讲解得非常详细和易懂。 此外,王硕还给出了大量练习题,这些练习题包含了书中介绍的算法数据结构,可以帮助读者巩固理论,并加强实践操作。此外,他还提供了一些Python的库和工具,帮助读者更好地应用算法设计和分析。 总之,这本书相当实用和权威。对于想要学习Python算法设计和分析的人,这是一本非常好的参考书。建议理工科专业的学生认真学习,一定会对未来的学习和工作产生良好的帮助。 ### 回答3: Python算法设计与分析王硕答案是一本关于Python编程语言的算法设计与分析的书籍,该书主要讲解了Python语言在算法分析和实现方面的优势。本书主要分为七章,涵盖了排序算法、字符串算法、动态规划、贪心算法、图论和计算几何等核心算法。 作者通过实例和代码的方式向读者演示如何用Python实现各种算法,并展示了Python算法分析与实现方面的独特魅力。书中的例题和练习题非常实用,帮助读者理解算法思想和Python编程语言,并提供了丰富的练习机会,巩固学习成果。 此书对于学习算法Python编程语言的人群来说有很大的帮助,因为它具有简洁明快的语言和良好的逻辑性,适合初学者和有一定编程基础的读者。此外,此书中的例题和代码对于实际工作中的编程问题也有很好的借鉴作用,可以帮助读者更好地解决实际问题。总之,Python算法设计与分析王硕答案是一本值得推荐的书籍,适合广大Python程序员和算法爱好者阅读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coleak

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值