构造C的歪
思路
这道题其实非常直接:给你两个整数 和
,要你找一个第三个整数
,使得这三个数排序后能构成等差数列。
等差数列的核心性质是什么?中间那个数等于两端的平均值,也就是说三个数 满足
,即
。
那我们找 其实有三种可能的位置:
在最左边:
(或
),此时
在中间:
,但这要求
是偶数才行
在最右边:
题目说了"多种答案输出任意一个即可",那我们挑一个最简单的、不用担心整除问题的就行。
最简做法
直接输出 就完事了。为什么?
- 如果
,排序后是
,公差为
,完美的等差数列。
- 如果
,排序后是
,公差为
,同样是等差数列。
一行搞定,甚至不需要排序、不需要判断奇偶,简洁到极致。
代码
#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();
});
复杂度分析
- 时间复杂度:
,只做了一次加减运算。
- 空间复杂度:
,只用了两个变量。



京公网安备 11010502036488号