Alx09

Untitled

Apr 7th, 2020
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /*
  4. Am eliminat posibilitatile de genul 1 2 1 , 2 1 1, 1 1 2
  5. E bazat pe un vector de pointer
  6. Am sortat reperele si dupa am lucrat cu ajutoul vectroului de pointeri
  7. Am optimizat memoria mult, si numarul de cazuri posibile l-am redus
  8. Sper ca e bine ca am eliminat cazurile de la inceput.
  9. */
  10.  
  11. int main() {
  12. unsigned L, n, suma, i = 1, varf, *stiva[1001];
  13. unsigned repere[11];
  14. FILE *f;
  15. f = fopen("in.txt", "r");
  16. fscanf(f, "%u%u", &L, &n);
  17. for (i = 1; i <= n; i++)
  18. fscanf(f, "%u", &repere[i]);
  19. do { // Bubble sort
  20. suma = 0;
  21. for (i = 1; i <= n; i++)
  22. if (repere[i] > repere[i + 1])
  23. suma = 1,repere[i] ^= repere[i + 1], repere[i + 1] ^= repere[i], repere[i] ^= repere[i + 1];
  24. } while (suma);
  25. // Se pot aloca vectori de pointer dinamic? pentru ca avem nevoie de o stiva de L/repere[1] + 2 si sa nu fac risipa
  26. suma = repere[1];// initializari
  27. varf = 1;
  28. stiva[0] = repere + varf; // sa nu am eroare cand varf = 0
  29. stiva[varf] = repere + varf;
  30. while(varf) { // se opreste cand stiva este goala
  31. if (suma < L) // daca suma este mai mica adaugam adresa varfului la varf urmator si adunam la suma
  32. stiva[varf + 1] = stiva[varf], suma += *stiva[varf++];
  33. else {
  34. if (suma == L) { // daca s = l se afiseaza (nu am mai stat de functii)
  35. for (i = 1; i <= varf; i++)
  36. printf("%u ", *stiva[i]);
  37. printf("\n");
  38. }
  39. suma -= *stiva[varf--]; // scadem din suma actual varf dupa care scadem varful
  40. suma -= *stiva[varf]; //scadem din suma noul varf
  41. stiva[varf]++; //noului varf i se atrebuie adresa urmatorul element din repere
  42. suma += *stiva[varf]; // se adauga valoarea elemtnul din repere
  43. }
  44.  
  45. }
  46. }
Advertisement
Add Comment
Please, Sign In to add comment