Cod sursa(job #2663270)

Utilizator teochess2017Togan Teodor-Bogdan teochess2017 Data 25 octombrie 2020 19:58:51
Problema Loto Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 2.09 kb
#include <stdio.h>
#include <stdlib.h>

int v[100], sume[1000000], out[6];

void quicksort(int min, int max){
  int b, e, piv, aux;
  piv = sume[(min + max) / 2];
  b = min;
  e = max;
  while(sume[b] < piv){
    b++;
  }
  while(sume[e] > piv){
    e--;
  }
  while(b < e){
    aux = sume[b];
    sume[b] = sume[e];
    sume[e] = aux;
    do{
      b++;
    }while(sume[b] < piv);
    do{
      e--;
    }while(sume[e] > piv);
  }
  if(min < e){
    quicksort(min, e);
  }
  if((e + 1) < max){
    quicksort(e + 1, max);
  }
}

int main()
{
    FILE *fin, *fout;
    int n, s, i, j, ind, is, ci, cj;///am tinut inca un indice pentru sume[] ,deoarece mi se pare mai simplu de observat si implementat
    fin=fopen("loto.in", "r");
    fscanf(fin, "%d%d", &n, &s);
    for(i = 0; i < n; i++){
      fscanf(fin, "%d", &v[i]);
    }
    fclose(fin);
    is = 0;
    for(i = 0; i < n; i++){
      for(j = i; j < n; j++){
        for(ind = j; ind < n; ind++){
          sume[is] = v[i] + v[j] + v[ind];
          is++;
        }
      }
    }
    quicksort(0, is - 1);
    i = 0;
    j = is - 1;
    while((i <= j) && (s != (sume[i] + sume[j]))){
      if(s < (sume[i] + sume[j])){
        j--;
      }else{
        i++;
      }
    }
    fout=fopen("loto.out", "w");
    if(i <= j){
      ci = i;
      cj = j;
      is = 0;
      for(i = 0; i < n; i++){
        for(j = i; j < n; j++){
          for(ind = j; ind < n; ind++){
            if((v[i] + v[j] + v[ind]) == sume[ci]){
              out[0] = i;
              out[1] = j;
              out[2] = ind;
            }
            if((v[i] + v[j] + v[ind]) == sume[cj]){
              out[3] = i;
              out[4] = j;
              out[5] = ind;
            }
            is++;
          }
        }
      }
      for(i = 0; i < 6; i++){
        sume[i] = out[i];
      }
      quicksort(0, 5);
      fprintf(fout, "%d %d %d %d %d %d", v[sume[0]], v[sume[1]], v[sume[2]], v[sume[3]], v[sume[4]], v[sume[5]]);
    }else{
      fprintf(fout, "-1");
    }
    fclose(fout);
    return 0;
}