题目链接
题目描述
给定两个整数 和
,需要找到第三个整数
,使得这三个数排序后能构成一个等差数列。输出任意一个满足条件的
即可。
解题思路
等差数列的核心性质是中间项是首末两项的平均值。换句话说,如果排序后的三个数为 ,那么必须满足
,即
。
我们设给定的两个数为 和
,要找的数为
。不失一般性,我们先对
和
进行排序,得到
和
。现在我们有两个数
和
,需要找到第三个数
使得它们能构成等差数列。有以下三种可能的情况:
是中间项:数列为
。 此时公差为
,那么第三个数
。
是中间项:数列为
。 此时公差为
,那么第一个数
。
是中间项:数列为
。 此时
。这种情况只有当
是偶数时,才能找到整数解
。
由于题目要求我们输出任意一个解决方案即可,最简单的做法是选择第一种或第二种情况,因为它们总是能构造出整数解,无需判断奇偶性。
例如,我们可以选择第一种情况:计算出 和
中的较大值和较小值,然后根据公差构造出第三个数。
代码
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
long long a, b;
cin >> a >> b;
long long x = min(a, b);
long long y = max(a, b);
cout << 2 * y - x << "\n";
return 0;
}
import java.util.Scanner;
import java.lang.Math;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long a = sc.nextLong();
long b = sc.nextLong();
long x = Math.min(a, b);
long y = Math.max(a, b);
System.out.println(2 * y - x);
}
}
a, b = map(int, input().split())
x = min(a, b)
y = max(a, b)
print(2 * y - x)
算法及复杂度
- 算法:数学
- 时间复杂度:
,仅涉及几次基本的算术运算和比较。
- 空间复杂度:
,只使用了常数个变量。