Pagini recente » Diferente pentru utilizator/luijika_programatorul intre reviziile 17 si 16 | Cod sursa (job #2436975) | Diferente pentru utilizator/luijika_programatorul intre reviziile 18 si 17 | Diferente pentru utilizator/luijika_programatorul intre reviziile 18 si 19 | Cod sursa (job #2429877)
#include <fstream>
#include <iomanip>
using namespace std;
int A[30],k,n,contor;
float val[30],val2[30000],sum;
bool isUsed[30];
ifstream fin("dezastru.in");
ofstream fout("dezastru.out");
bool isValid(int pos)
{
if(isUsed[A[pos]])
return false;
return true;
}
void tipar()
{
float tmp=1.0f;
for(int i = 1;i<=k;i++)
tmp*=val[A[i]];
contor++;
val2[contor]=tmp;
}
void backt(int pos)
{
for(int x = 1;x<=n;x++)
{
A[pos]=x;
if(isValid(pos))
{
isUsed[x] = true;
if(pos==k){
isUsed[A[k]]=false;
tipar();
}
else
backt(pos+1);
}
}
}
int main()
{
fin>>n>>k;
for(int i = 1;i<=n;i++)
fin>>val[i];
backt(1);
for(int i = 1;i<=contor;i++)
{
sum+=val2[i]/contor;
}
fout<<setprecision(6)<<fixed<<sum;
fout.close();
return 0;
}