Pagini recente » Cod sursa (job #2869655) | Cod sursa (job #1536159) | Cod sursa (job #2205163) | Cod sursa (job #1909245) | Cod sursa (job #271360)
Cod sursa(job #271360)
#include <stdio.h>
int v[30];
float suma, prob[30];
int p;
int n;
int k,nfact,kfact,n2;
int init()
{
return 1;
}
int exista( int t)
{
if (v[t]<n)
return 1;
return 0;
}
int cond( int t)
{
int i;
//printf("cond pt t = %d\n",t);
for(i=0;i<t;i++)
if(v[i]==v[t]){ //verificam sa fie diferit si sa fie mai mare ca sa fie unica solutia
//printf("nu este pt v[t] = %d si v[i] = %d\n",v[t],v[i]);
return 0; }
return 1;
}
int solutie( int t)
{
if(t==k)
return 1;
return 0;
}
void afisare(int t)
{
int i;
float temp;
temp =1;
// printf("debug----\n");
//int j;
//for(j=0;j<t;j++)
// printf("%d %f\t",v[j],prob[v[j]]);
for(i=0;i<t;i++)
temp *= prob[v[i]-1];
// printf("temp: %f\t\n",temp);
temp/=p;
suma+=temp;
//printf("\n");
}
void bkt(int t)
{
int i;
if(solutie(t))
afisare(t);
else
for(i=init();i<=n;i++) //for de la prima valoare valida la ultima valoare valida
{
v[t] = i; //aici dami valorile posibile
if(cond(t)) //verificare conditii pentru valoarea curenta
bkt(t+1);
}
}
int main()
{
int i;
freopen("dezastru.in","r",stdin);
freopen("dezastru.out","w",stdout);
scanf("%d%d",&n,&k);
for(i=0;i<n;i++)
scanf("%f",&prob[i]);
nfact = 1;
for(i=1;i<=n;i++)
nfact *= i;
kfact=1;
n2 = n - k;
for(i=1;i<=n2;i++)
kfact *= i;
// printf("qaz ");
// fflush(stdout);
p = nfact / kfact;
suma=0;
bkt(0);
printf("%f ",suma);
return 0;
}