题目描述
牛妹需要用 根桥柱搭建一座桥,第一根桥柱和最后一根桥柱的高度已经确定,分别为 和 。为了保证桥梁的稳固性,相邻桥柱的高度差不能超过 1。牛妹想知道,在保证稳固性的前提下,桥梁中最高的桥柱能有多高。你需要帮助牛妹计算桥梁最高的桥柱的高度。
题目分析
很明显,这一题就是一个很简单的数学题。难就是难在我们需要怎么找到它的规律。
那规律在哪里呢?
相邻桥柱的高度差不能超过 1。 这句话非常重要,也就是说相邻的两个数必须是递增,递减,亦或者是不变,而且变化不能超过 1。
既然已经知道相邻不能超过 1。那我们是不是要看起点 到终点 的的高度差有多少呢?那我们就用上 Math.abs(a-b)
,需要取绝对值。毕竟没说谁高谁低嘛。
那我们求出来我们有多少高度差能够让我们霍霍使用,那该怎么去计算呢?公式是 Math.max(a,b)+(n-1-dis)/2
记住一点,相邻差不能超过 1,每增加一个高度差,需要两个桥柱,就是要除以 2,也就是说,我们要变化一个高度,要用两个桥柱。
而 n - 1 - diff
是指除了第一根桥柱,再减去我们连接起点与终点需要的桥柱,就还剩下了多少桥柱给我们霍霍,剩下的再加上起始桥柱的最高高度,也就是桥梁中最高的桥柱高度。
我计算是对的但是为什么还是过不了
好问题,你做特判了吗?
其中一个样例输出了 -1,也就是说,会有不成立的情况存在。那这个样例说明了什么,原来是高度变化需要的桥柱数量多过了能够提供的数量啊。突然释怀的笑。
那不就好解决了吗,直接做一个判断,如果桥柱数量小于高度差,那就是不成立的, 是因为我们需要把起点桥柱排除。代码如下:
if(n<dis+1){
return -1;
}
蒟蒻の代码:
public class Main {
public static int solution(int n, int a, int b) {
// write code here
int dis = Math.abs(a-b);
if(n<dis+1){
return -1;
}
int maxx = Math.max(a,b)+(n-1-dis)/2;
return maxx;
}
public static void main(String[] args) {
System.out.println(solution(2, 1, 1) == 1);
System.out.println(solution(3, 1, 1) == 2);
System.out.println(solution(5, 3, 2) == 4);
System.out.println(solution(5, 1, 100) == -1);
System.out.println(solution(4, 1, 4) == 4);
}
}