Pagini recente » Cod sursa (job #2999761) | Cod sursa (job #1145965) | Cod sursa (job #360564) | Cod sursa (job #303042) | Cod sursa (job #68619)
Cod sursa(job #68619)
#include <stdio.h>
double P=0;
double afis(int n, int x[], double p[], int&nr) {
int i;
double aux=1;
nr++;
for (i=1; i<=n; ++i)
aux*=p[x[i]];
return 2*aux;
}
void comb (int n, int k, double p[], int &nr){
int line, x[30], eSuccesor, eCandidat;
line=1;
x[0]=0; x[1]=0;
while (line>0) {
do {
if (x[line] < n-k+line) {
x[line]++;
eSuccesor=1;
eCandidat=1;
} else eSuccesor=0;
} while (eSuccesor && !eCandidat);
if (eSuccesor)
if (line==k) P+=afis(k, x, p, nr);
else x[++line]=x[line-1];
else --line;
}
}
int main() {
int i, n, k, nr=0;
double p[26];
FILE *f=fopen ("dezastru.in", "r");
FILE *g=fopen ("dezastru.out", "w");
fscanf (f, "%d %d\n", &n, &k);
for (i=1; i<=n; ++i) fscanf (f, "%lf ", &p[i]);
comb(n, k, p, nr);
P/=(2*nr);
fprintf (g, "%lf\n", P);
fclose(f);
fclose(g);
return 0;
}