Pagini recente » Cod sursa (job #2748140) | Cod sursa (job #897034) | Cod sursa (job #299454) | Cod sursa (job #1701797) | Cod sursa (job #2787552)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("loto.in");
ofstream cout("loto.out");
int n,sum;
int v[101];
int frecv[101]={0};
bool visited[101]={0};
bool gata = false;
const int TOTAL = 6;
int currentSum=0;
int currentCount=0;
bool isOK(int i)
{
if (currentCount < TOTAL && (currentSum + v[i] <= sum))
return true;
return false;
}
bool isDone()
{
if(currentCount == TOTAL && currentSum == sum)
return true;
return false;
}
void display()
{
for(int i = 0 ; i < n ; i++)
{
while(frecv[i]>0)
{
cout << v[i] <<" ";
frecv[i]--;
}
}
}
void back()
{
/// base condition
if(isDone() && !gata)
{
gata = true;
display();
return;
}
/// recursive function
for(int i = 0 ; i < n ; i++)
{
if ( isOK(i))
{
frecv[i]++;
currentCount++;
currentSum+=v[i];
back();
frecv[i]--;
currentCount--;
currentSum-=v[i];
}
}
}
int main()
{
cin>>n>>sum;
for(int i =0 ; i < n ; i++)
cin>>v[i];
sort(v,v+n);
//back();
///take first element six times
frecv[0] = 6;
currentCount = 6;
currentSum = v[0]*frecv[0];
int i = 1;
int smallest = 0,bigger =0;
while(currentSum != sum && smallest < n-1)
{
/// increase sum
/// remove smallest element
for(int j = 0 ; j < n ; j ++)
{
if(frecv[j]>0)
{
smallest = j;
frecv[j]--;
currentSum -=v[j];
break;
}
}
/// add a bigger element
for(int j = smallest+1 ; j < n ; j ++)
{
bigger = j;
frecv[j]++;
currentSum +=v[j];
break;
}
}
if(currentSum != sum)
cout<<"-1";
else
{
display();
}
return 0;
}