Pagini recente » Cod sursa (job #1481810) | Cod sursa (job #1116454) | Cod sursa (job #2574488) | Cod sursa (job #2609193) | Cod sursa (job #2209394)
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;
std::ifstream in("loto.in");
std::ofstream out("loto.out");
int n, S, T=0;
struct nr {
int val;
int cant=6;
} a, b;
nr v[7], x[100];
bool cont=true;
int cmp(const void* a, const void* b)
{
nr* arg1 = (nr*) a;
nr* arg2 = (nr*) b;
if( arg1->val < arg2->val ) return -1;
else if( arg1->val == arg2->val ) return 0;
else return 1;
}
bool accept(int p)
{
bool b1=(v[p].cant>0 && p<=6);
T=0;
for (int i=1; i<=p; ++i) T=T+v[i].val;
bool b2=(T<=S);
return b1 && b2;
}
void Back(int i)
{
for (int j=0; j<=5; j++)
{
v[i]=x[j];
if (accept(i))
{
if (i<6 && cont) Back(i+1);
else
{
if (T==S)
{
for (int k=1; k<=6; k++)
{
out << v[k].val << " ";
}
cont=false;
}
}
}
}
}
int main()
{
in >> n >> S;
for (int i=0; i<n; ++i)
{
in >> x[i].val;
}
qsort(x, n, sizeof(nr), cmp);
if (6*x[0].val>S || 6*x[n-1].val<S)
{
out << -1;
return 0;
}
Back(1);
return 0;
}