给出的三个数可能有两种情况(设四个数为 $ABCD$):

  1. 已经为等差数列,这个很好判断。已经给出了 $ABC$,则 $D$ 等于 $A-B$ 或 $B-C$,则 $D$ 可以等于 $A-D$ 或 $C+D$。

  2. 此时未成为等差数列,即 $A - B\neq B - C$,若增加一个数成为等差数列,必定有 $A < D < C$,所以我们只要判断 $D$ 应该再 $AB$ 之间还是 $BC$ 直接。大家一定能想到 $D$ 一定需要放在两数之差大的地方才可能有解,因此就有:
    $\begin{cases}
    A-B>B-C,D=A+\frac{B-A}{2}\\
    A-B<B-C,D=B+\frac{C-B}{2}\\
    \end{cases}$

当然,以上先要对这三个数先排序,因为其余的三个数的顺序被打乱了。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[4];
cin>>a[1]>>a[2]>>a[3];
sort(a + 1,a + 4);
if(a[2] - a[1] == a[3] - a[2]) cout<<a[3] + (a[2] - a[1])<<endl;
if(a[2] - a[1] > a[3] - a[2]) cout<<a[1] + (a[2] - a[1]) / 2<<endl;
if(a[2] - a[1] < a[3] - a[2]) cout<<a[2] + (a[3] - a[2]) / 2<<endl;
return 0;
}