Pagini recente » Cod sursa (job #510069) | Cod sursa (job #2178545) | Cod sursa (job #606925) | Diferente pentru implica-te/arhiva-educationala intre reviziile 63 si 64 | Cod sursa (job #793609)
Cod sursa(job #793609)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("dezastru.in");
ofstream fout("dezastru.out");
float p[26], rezultat;
int k;
int fact(int x)
{
if(x == 0) return 1;
return x * fact(x - 1);
}
void aduna(int x[100])
{
float s = 1.0;
for(int i = 1; i <= k; i++) s = s * p[x[i]];
rezultat = rezultat + s;
}
int bun(int x[100], int k)
{
int i;
for(i = 1; i < k; i++) if(x[k] == x[i]) return 0;
return 1;
}
void back(int x[100], int n, int k)
{
for(int i = 1; i <= n; i++)
{
x[k] = i;
if(bun(x, k))
{
if(k == n) aduna(x);
else back(x, n, k + 1);
}
}
}
int main()
{
int n, x[100];
fin >> n >> k;
for(int i = 1; i <= n; i++) fin >> p[i];
back(x, n, 1);
fout << rezultat / fact(n);
fin.close();
fout.close();
return 0;
}