Pagini recente » Cod sursa (job #1241410) | Cod sursa (job #2758452) | Cod sursa (job #1884125) | Cod sursa (job #475760) | Cod sursa (job #37921)
Cod sursa(job #37921)
#include <stdio.h>
#include <memory.h>
int n,k;
long double prob[28];
int sol[28];
char uzed[28];
long double totprob;
long double curprob=1;
long totcount;
void woosh(int ou) {
if (ou==k+1) {
/*
for (int i=1; i<=k; i++) printf("%Lf ",prob[sol[i]]);
printf("\n");
*/
// long double localprob=1;
// for (int i=1; i<=k; i++) localprob*=prob[sol[i]];
// printf("Local probability is %Lf\n",localprob);
totprob+=curprob;
totcount++;
} else {
for (int i=1; i<=n; i++) if (!uzed[i]) {
uzed[i]=1;
sol[ou]=i;
curprob*=prob[sol[ou]];
woosh(ou+1);
curprob/=prob[sol[ou]];
sol[ou]=0;
uzed[i]=0;
};
};
};
int main (void) {
FILE * fi = fopen("dezastru.in","rt");
FILE * fo = fopen("dezastru.out","wt");
fscanf(fi,"%d %d",&n,&k);
for (int i=1; i<=n; i++) fscanf(fi,"%Lf",&prob[i]);
for (int i=1; i<=n; i++) sol[i]=i;
memset(uzed,0,sizeof(uzed));
woosh(1);
fprintf(fo,"%.6Lf\n",totprob/totcount);
fclose(fi); fclose(fo);
return 0;
};