Pagini recente » Cod sursa (job #1314272) | Cod sursa (job #1859499) | Cod sursa (job #3003989) | Cod sursa (job #846463) | Cod sursa (job #1325965)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("dezastru.in");
ofstream g("dezastru.out");
int v[26],n,as,se,atacuri,k,nr;
float produs, suma,valoare [26];
void adaugare_suma ();
void citire ()
{
int i;
f>>n>>atacuri;
for (i=1;i<=n;i++)
f>>valoare [i];
}
void init ()
{
v[k]=v[k-1];
}
int verificare ()
{
if (k==atacuri)
return 1; return 0;
}
int validare1 ()
{
if (v[k]<n)
{
v[k] ++ ;
return 1;
}
return 0;
}
int validare2 ()
{
return 1;
}
void backtracking()
{
k=1;
init ();
while (k>0)
{
as=1;
se=0;
while (as && !se)
{
as=validare1 ();
if (as)
se =validare2 ();
}
if (as)
if (verificare ())
adaugare_suma ();
else
{
k++;
init ();
}
else
k--;
}
}
void adaugare_suma ()
{
nr+=2;
int i;
float produs =1;
for (i=1;i<=k;i++)
produs *= valoare [v[i]];
suma = suma + produs *2 ;
}
int main()
{
citire();
backtracking ();
g << (float) suma / nr;
return 0;
}