目录
算法与数据结构实验题 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
★数据输出
输出最少需要从别处拿的智慧果数。
输入示例
31 8 0
输出示例
4
基本思路
先排除数组中所有比my_list[0]小的数字,然后将数组排序一次,通过条件判断依次将最大元素减小并增大首项元素,并通过一系列条件判断出可能出现的特殊情况。当最大元素仍然大于首元素且最大元素和次大元素大小相同时,将最大元素弹出列表,并对每次首项元素的增加次数和移动次数作出变动,直到达到题目要求为之。tip:一开始弹出使用的是remove函数,发现debug时发现首元素被弹出(当首元素大小和-1号元素相等时),于是改为pop来进行弹出操作
代码实现
q=0count=0num=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]+=1my_list[-1]-=1count+=1if my_list[0]>my_list[-1]:breakif my_list[0]+q<=my_list[-1]:my_list[0]+=qcount+=qelse:count+=(my_list[-1]-my_list[0]+1)my_list[0]+=(my_list[-1]-my_list[0]+1)breakif my_list[0] > my_list[-1]:breakmy_list.pop()q += 1if len(my_list)==1:count+=1breakprint(count)
效果展示
算法与数据结构实验题 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个整数,代表每天融化的体积。(整数间以空格分隔)
输入示例
310 10 55 7 2
输出示例
5 12 4
基本思路
遍历数组2,并通过条件判断出数组一中剩下的组是否能对当天融化的数量作出贡献,将贡献值加起来作为当天累计的融化量,输出完成后将count置0处理
代码展示
count=0i=0num=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]=0if i:print('',end=' ')print(count,end='')count=0i += 1