#include <iostream>
#define endl "\n"
using namespace std;
int a, b, c;
double minimumX;
bool isValid(int a, int b, int c) {
return b - a == c - b;
}
int getDiff(int b, int a) {
int diff = b - a;
return diff;
}
double getAbsDiffDouble(double a, double b) {
double diff = a - b;
if (diff < 0) {
diff *= -1;
}
return diff;
}
void solve() {
cin >> a >> b >> c;
minimumX = 987654321.0;
if (isValid(a, b, c)) {
cout << "0.0" << endl;
return;
}
int compC = b + getDiff(b, a);
double diff = getAbsDiffDouble((double)compC, (double)c);
if (diff < minimumX) {
minimumX = diff;
}
double compB = (double)a + (double)getDiff(c, a) / 2;
diff = getAbsDiffDouble(compB, (double)b);
if (diff < minimumX) {
minimumX = diff;
}
int compA = b - getDiff(c, b);
diff = getAbsDiffDouble((double)compA, (double)a);
if (diff < minimumX) {
minimumX = diff;
}
cout << minimumX << endl;
}
int main() {
//freopen("sample_input_swea_18662.txt", "r", stdin);
ios_base::sync_with_stdio(0);
cin.tie(0);
int TC;
cin >> TC;
cout << fixed;
cout.precision(1);
for (int tc = 1; tc <= TC; ++tc) {
cout << "#" << tc << " ";
solve();
}
return 0;
}
a, b, c가 등차수열을 이루게 하는 최소 x 구하기.
이때, 최소 x란 a, b, c 중 하나를 선택하여 실수 x를 더하거나 뺐을 때 a, b, c가 등차수열을 이루게 하는 x를 의미.
절대오차 또는 상대오차가 10의 -9승 이하여야 하므로, 유효숫자가 6인 float는 사용 불가. 따라서 x는 double 자료형(유효숫자 15).다음 3가지 경우 고려
1. a b c+-x 가 등차수열
2. a b+-x c 가 등차수열
3. a+-x b c 가 등차수열각 경우마다 x를 구하여 minimumX를 업데이트 하여 최종 minimumX를 출력하는 코드 작성