Pagini recente » Cod sursa (job #2405348) | Cod sursa (job #2128121) | Cod sursa (job #2148860) | Cod sursa (job #2265671) | Cod sursa (job #2061445)
#include <stdio.h>
#define nmax 26
using namespace std;
FILE *fin, *fout;
int n, k, i;
float v[nmax];
int sol[nmax];
int kFact;
float prob = 0;
int fact(int n)
{
if(n==0)
return 1;
int i = 0, fact = 1;
for(i = 1; i <= n; i++)
fact *= i;
return fact;
}
void prelucrare()
{
int i;
float prob1 = 1;
for(i = 1; i <= k; i++)
{
prob1 *= v[sol[i]];
}
prob += prob1 * kFact;
printf("%f %f\n", prob1, prob1* kFact);
}
void print()
{
for(int i = 1; i <= k; i++)
printf("%d ", sol[i]);
printf("\n");
}
void backtrack(int x)
{
if(x==k+1)
prelucrare();
else
for(int i = 1; i <= n; i++)
{
sol[x] = i;
if(sol[x]>sol[x-1])
backtrack(x+1);
}
}
int main(void)
{
fin = fopen("dezastru.in", "r");
fout = fopen("dezastru.out", "w");
fscanf(fin, "%d %d", &n, &k);
for(i = 1; i <= n; i++)
fscanf(fin, "%f", &v[i]);
kFact = fact(k);
backtrack(1);
fprintf(fout, "%f", prob/fact(n));
fclose(fin);
fclose(fout);
return 0;
}