构造C的歪

思路

这道题其实非常直接:给你两个整数 ,要你找一个第三个整数 ,使得这三个数排序后能构成等差数列。

等差数列的核心性质是什么?中间那个数等于两端的平均值,也就是说三个数 满足 ,即

那我们找 其实有三种可能的位置:

  1. 在最左边(或 ),此时
  2. 在中间,但这要求 是偶数才行
  3. 在最右边

题目说了"多种答案输出任意一个即可",那我们挑一个最简单的、不用担心整除问题的就行。

最简做法

直接输出 就完事了。为什么?

  • 如果 ,排序后是 ,公差为 ,完美的等差数列。
  • 如果 ,排序后是 ,公差为 ,同样是等差数列。

一行搞定,甚至不需要排序、不需要判断奇偶,简洁到极致。

代码

#include <iostream>
using namespace std;
int main() {
    long long a, b;
    cin >> a >> b;
    cout << 2 * a - b << endl;
    return 0;
}
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long a = sc.nextLong();
        long b = sc.nextLong();
        System.out.println(2 * a - b);
    }
}
a, b = map(int, input().split())
print(2 * a - b)
const readline = require('readline');
const rl = readline.createInterface({ input: process.stdin });
rl.on('line', line => {
    const [a, b] = line.split(' ').map(Number);
    console.log(2 * a - b);
    rl.close();
});

复杂度分析

  • 时间复杂度,只做了一次加减运算。
  • 空间复杂度,只用了两个变量。