题解:P6352 [COCI2007-2008#3] CETIRI
给出的三个数可能有两种情况(设四个数为 $ABCD$):
已经为等差数列,这个很好判断。已经给出了 $ABC$,则 $D$ 等于 $A-B$ 或 $B-C$,则 $D$ 可以等于 $A-D$ 或 $C+D$。
此时未成为等差数列,即 $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; }
|