| #include <stdio.h>
#include <vector>
#include <cmath>
using namespace std;
double cv[7];//вектор значений емкостей конденсаторов
double C;//эталонное значение
double CAnsw;//ответ на задачу
void f(double* cv, int n);
//функции вычисления мин. значения, согласно условию задачи (сравнение с С)
double min2d(double a, double b);
double min3d(double a, double b, double c);
//------------------------------------------------------
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int n;
scanf("%d", &n);
scanf("%Lf", &C);
for(int i=0; i<n; ++i)
scanf("%Lf", &cv[i]);
CAnsw = cv[0];
for(int i=1; i<n; ++i)
CAnsw = min2d(CAnsw, cv[i]);
f(cv, n);
printf("%0.6Lf\n", CAnsw);//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
return 0;
}
//------------------------------------------------------
//------------------------------------------------------
void f(double* cv, int n){
for(int i=0; i<n-1; ++i)//перебрать все пары конденсаторов из cv
for(int j=i+1; j<n; ++j){
double c1 = cv[i] + cv[j];//параллельное соединение
double c2 = (cv[i] * cv[j]) / c1; //последовательное соединение
CAnsw = min3d(CAnsw, c1, c2);
//создание новой последовательности без cv[i] и cv[j]
double cvSmall[7];
int k(0);
for(int z(0); z<n; ++z)
if(z!=i && z!=j) {cvSmall[k]=cv[z]; ++k;}
cvSmall[k]=c1;
f(cvSmall, k+1);//новая последовательность и с1
cvSmall[k]=c2;
f(cvSmall, k+1);//новая последовательность и с2
}
}
//------------------------------------------------------
double min2d(double a, double b){
return fabs(C-b)-fabs(C-a)>=0.0 ? a : b;
}
//------------------------------------------------------
double min3d(double a, double b, double c){
return fabs(C-b)-fabs(C-a)>=0.0 ? min2d(a, c) : min2d(b, c);
}
|