Cod sursa(job #1809998)

Utilizator timar_andreiTimar Andrei timar_andrei Data 19 noiembrie 2016 15:03:12
Problema Loto Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
/**
Gigel este un mare pasionat al jocurilor de noroc, iar cel mai mult ii place sa joace la loto "6 din N". La acest joc, el poate scrie pe un bilet 6 numere, din N numere naturale
distincte date de Loteria Nationala; un numar poate fi folosit pe un bilet de mai multe ori. Gigel a visat intr-o noapte ca suma numerelor scrise pe biletul castigator va fi S,
asa ca a doua zi s-a dus sa puna si el un bilet castigator!

Cerinta
Scrieti un program care ii spune lui Gigel ce numere trebuie sa aleaga ca sa obtina un bilet castigator (cu suma S)

Date de Intrare
Pe prima linie din fisierul loto.in se vor gasi numerele naturale N si S, separate prin cate un spatiu. Pe a doua linie vor fi N numere naturale distincte, date de Loteria Nationala.

Date de Iesire
In fisierul loto.out se vor gasi 6 valori reprezentand numerele alese pentru biletul lui Gigel. Daca nu se poate obtine un bilet castigator in fisierul de iesire se va afla doar numarul -1.

Restrictii si precizari
1 <= N <= 100
1 <= S <= 600.000.000
Valorile numerelor date de Loteria Nationala nu vor depasi 100.000.000
Daca exista mai multe solutii, se va afisa una singura
*/
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("loto.in");
ofstream fout("loto.out");

int N,S,V[101],X[101],F;

void Citire()
{
	fin>>N>>S;

	for(int i=1;i<=N;i++)
		fin>>V[i];
}

void Print()
{
	for(int i=1;i<=6;i++)
		fout<<V[X[i]]<<' ';
	fout<<endl;
}

void Compare()
{
	int s=0;

    for(int i=1;i<=6;i++)
	{
		s += V[X[i]];
	}

	if (s == S)
	{
		F = 1;
        Print();
	}
}

void Rezolvare(int k)
{
	if (F == 1)
		return;

    for(int i=1;i<=N;i++)
	{
		X[k] = i;

		if (k == 6)
		{
			Compare();
			if (F == 1)
				return;
		}
		else
		{
			Rezolvare(k+1);
		}
	}
}

int main()
{
	Citire();
	Rezolvare(1);

	if (F == 0)
		fout<<-1;

	return 0;
}