题目链接

构造C的歪

题目描述

给定两个整数 ,需要找到第三个整数 ,使得这三个数排序后能构成一个等差数列。输出任意一个满足条件的 即可。

解题思路

等差数列的核心性质是中间项是首末两项的平均值。换句话说,如果排序后的三个数为 ,那么必须满足 ,即

我们设给定的两个数为 ,要找的数为 。不失一般性,我们先对 进行排序,得到 。现在我们有两个数 ,需要找到第三个数 使得它们能构成等差数列。有以下三种可能的情况:

  1. 是中间项:数列为 。 此时公差为 ,那么第三个数
  2. 是中间项:数列为 。 此时公差为 ,那么第一个数
  3. 是中间项:数列为 。 此时 。这种情况只有当 是偶数时,才能找到整数解

由于题目要求我们输出任意一个解决方案即可,最简单的做法是选择第一种或第二种情况,因为它们总是能构造出整数解,无需判断奇偶性。

例如,我们可以选择第一种情况:计算出 中的较大值和较小值,然后根据公差构造出第三个数。

代码

#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)

算法及复杂度

  • 算法:数学
  • 时间复杂度:,仅涉及几次基本的算术运算和比较。
  • 空间复杂度:,只使用了常数个变量。