Cod sursa(job #3251971)

Utilizator deyrownntdeyrownnt deyrownnt Data 27 octombrie 2024 21:57:45
Problema Loto Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.16 kb
/***Loto

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");

const int MAXM=6;
const int MAXN=100;

void sortare(int n, int v[MAXN]) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = i + 1; j < n; j++) {
            if (v[i] > v[j]) {
                swap(v[i], v[j]);
            }
        }
    }
}
bool prelucrare(int  Ssec,int N,int m,int g[MAXM],int v[MAXN]){
    if (m == MAXM) {
        return Ssec == 0; }
    for (int i = 0; i < N; i++) {
        g[m] = v[i]; 
        if (prelucrare(Ssec - v[i], N, m + 1, g, v)) {
            return true; 
        }
    }
    return false; 
}
void afisarevector(int n,int v[6]){
    for(int i=0;i<n;i++){
        fout<<v[i];
        if (i < MAXM - 1) {
            fout << " ";}
    }
}
int main(){
    int S,v[101],N,g[6],m=0;
    fin>>N>>S;
    for (int i = 0; i < N; i++) {
        fin >> v[i]; 
    }
    sortare(N,v);
   
    if(prelucrare(S,N,m,g,v)){
        afisarevector(6,g);
    }else fout<<-1;
    
    
    return 0;
}