Cod sursa(job #1092485)

Utilizator KiralyCraftKiraly Alex KiralyCraft Data 27 ianuarie 2014 09:39:14
Problema Dezastru Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
int x[500];
int m;
int n;
float citite[500];
float suma=0;
float fact=0;
fstream fin("dezastru.in",ios::in);
fstream fout("dezastru.out",ios::out);
void init(int k)
{
    x[k]=0;

}
int factorial(int n)
{
  return (n == 1 || n == 0) ? 1 : factorial(n - 1) * n;
}
bool exista(int k)
{
    return x[k]<n;
}
bool cont(int k)
{
    for (int i=1;i<k;i++)
    {
        if (x[k]==x[i])
        {
            return false;
        }
    }
    return true;
}
bool solutie(int k)
{
    return k==n;
}
void afis(int k)
{
    float temp=1;
    for (int i=1;i<=m;i++)
    {
        temp*=citite[x[i]];
    }
    suma+=(temp*(1/fact));
}
void back()
{
    int k=1;
    init(k);
    while(k)
        if (exista(k))
        {
            x[k]++;
            if (cont(k))
                if (solutie(k))
                {
                      afis(k);
                }
                else
                {
                    k++;
                    init(k);
                }
        }
        else
            k--;
}
int main()
{
    fin >> n >> m;
    fact=factorial(n);
    for (int i=1;i<=n;i++)
    {
        fin >> citite[i];
    }
    back();
    fout <<setprecision(6)<< suma;
    return 0;
}