Pagini recente » Cod sursa (job #1064192) | Cod sursa (job #1697246) | Cod sursa (job #2102833) | Cod sursa (job #1335) | Cod sursa (job #538533)
Cod sursa(job #538533)
#include<iostream>
#include<fstream.h>
#include <iomanip.h>
ifstream f("dezastru.in");
ofstream g("dezastru.out");
using namespace std;
int st[100],n,k,fact_k=1;
double sanda=1,total_probabil=0;
double a[100];
int valid(int p)
{
int i;
for(i=1;i<p;i++)
if(st[i]==st[p])return 0;
return 1;
}
void prod()
{
int i;
sanda=1;
for(i=1;i<=k;i++)
sanda=sanda*a[st[i]];
total_probabil=total_probabil+sanda;
/*
cout<<sanda<<" ";
system("pause");*/
}
//void afisare(){int i;for(i=1;i<=k;i++) g<<st[i]; g<<endl;}
void back(int p)
{int pval;
for(pval=st[p-1]+1;pval<=n;pval++)
{st[p]=pval;
if(valid(p))
if(p==k)
prod();
else
back(p+1);
}
}
int main()
{int i,j,fact=1;
f>>n>>k;
for(i=1;i<=n;i++)
f>>a[i];
for(i=k+1;i<=n;i++)
fact_k=fact_k*i;
//pt fiecare combinare k elem k! posibilitati de atac
// soltuia finala= posibiliati/(k+1)*(k+2)*..n
// ar fi trebuit posibilitati*k!/n!
back(1);
g<<setiosflags(ios::showpoint)<<setprecision(7)<<total_probabil/fact_k;
f.close();
g.close();
return 0;
}