Pagini recente » Cod sursa (job #1008922) | Cod sursa (job #1111700) | Cod sursa (job #2948888) | Cod sursa (job #2963019) | Cod sursa (job #68622)
Cod sursa(job #68622)
#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 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/=nr;
fprintf (g, "%lf\n", P);
fclose(f);
fclose(g);
return 0;
}