程设人生训练二
题目A

题目分析
利用循环累乘一下,如果当前乘积超过1e9则输出-1,并且return 0;(结束程序,降低时间复杂度),否则继续计算,然后最后输出结果。需要注意的是我们累乘计数器初始化为1,累加计数器初始化为0。
代码展示

题目B:

题目分析:
我们需要计算[l,r]内的数字除以x并向下取整的最大公约数,首先这是一道数学题目,连续的两个自然一定互质(最大公约数为1),则我们可以进行判断,如果L/X==R/X,则说明是gcd(L/X,L/X,....,L/X),最大公约数当然是L/X,否则一定包含连续的自然数,则最大公约数为1,同时代码展示有gcd函数的最简洁写法,希望大家记住,口诀是:BBABA。
代码展示:

题目C:

题目分析:
这是一道排序算法的经典模板题,是大家必须要掌握的,我们发现,题目要求数据进行排序和去重两个任务,我们再观察数据范围,发现数值较小,最大数字不超过30000,我们可以利用桶排序进行解决问题,桶排序顾名思义,就是假设有1-N个桶,每个桶可以存储一个数据,先初始化为0,我们每读入一个数据x,我们让a[x]++,表示数字x出现次数+1,这样子我们就可以同时去重和排序,局限性:数值范围小,不是数据范围小。
代码展示:

题目D:

题目分析:
这是一道背包的题目,是一道背包模板题,根据题目大意我们可以知道,每个物品只能使用一次,唯一价值,唯一消耗,是典型01背包问题。先利用背包进行预处理出体力为x是最多能运输的石块体积f[x],这样子我们就可以再循环找到最小可以运输v体积的体力f[i],剩余体力就是(c-i)

01背包模板
