Cod sursa(job #2061441)

Utilizator Alex_dudeDudescu Alexandru Alex_dude Data 9 noiembrie 2017 11:43:15
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#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("test.in", "r");
    fout =  fopen("test.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;
}