Pagini recente » Cod sursa (job #633765) | Cod sursa (job #848862) | Cod sursa (job #2571048) | Cod sursa (job #1080359) | Cod sursa (job #275113)
Cod sursa(job #275113)
#include<stdio.h>
#define infile "dezastru.in"
#define outfile "dezastru.out"
#define nmax 31
double p[nmax]; //probabilitatile atacurilor
int viz[nmax]; //viz[i]=1 daca al i-lea atac se afla in permutare
int n,k; //primele n atacuri din cele n! permutari (combinari din n luate cate k)
double probabilitate; //suma posibilitatilor
int nr; //numarul de posibilitati
void citire()
{
int i;
scanf("%d %d\n",&n,&k);
for(i=1;i<=n;i++)
scanf("%lf",&p[i]); //citim probabilitatea atacului i
}
//facem aranjamentele :>
void aranjamente(int x, double pr)
{
//x-pozitia din aranjament
//pr-probabilitatea acestei aranjari
int i;
if(x>k) //am facut aranjamentul
{
probabilitate+=pr; //adaugam la probabilitatea totala
nr++; //am mai gasit o combinare, ii crestem numarul
}
else
for(i=1;i<=n;i++)
if(!viz[i]) //daca nu este deja in aranjament
{
viz[i]=1; //marcam k l-am pus in combinare
aranjamente(x+1,pr*p[i]);
viz[i]=0; //il scoatem din combinare
}
}
int main()
{
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
citire();
aranjamente(1,1);
printf("%lf",probabilitate/nr);
fclose(stdin);
fclose(stdout);
return 0;
}