Alx09

Untitled

May 12th, 2020
1,480
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.75 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int n, st[20], v[20], nr;
  4. FILE* f2;
  5. void Citire()
  6. {
  7.     int i, element;
  8.     FILE* f = fopen("in.txt", "r");
  9.     if (f == NULL)
  10.     {
  11.         printf("Eroare la deschiderea fisierului f");
  12.         exit(1);
  13.     }
  14.     fscanf(f, "%d ", &n);
  15.     for (i = 1; i <= n; i++)
  16.     {
  17.         fscanf(f, "%d", &element);
  18.         v[i] = element;
  19.     }
  20.  
  21.     fclose(f);
  22. }
  23.  
  24.  
  25. void Sortare()
  26. {
  27.     int i, k, aux;
  28.     do {                //bubble sort
  29.         k = 0;
  30.         for (i = 1; i < n; i++)
  31.             if (v[i] > v[i + 1])
  32.             {
  33.                 k = 1;
  34.                 aux = v[i];
  35.                 v[i] = v[i + 1];
  36.                 v[i + 1] = aux;
  37.             }
  38.  
  39.     } while (k);
  40.  
  41. }
  42.  
  43.  
  44.  
  45. int Solution(int k)
  46. {
  47.     int dif = 0, contor = 0, j;
  48.     if (k == 1)
  49.         return 0;
  50.     if (k == 2)
  51.         return 1;
  52.  
  53.     else
  54.     {
  55.         //dif <=> ratia progresie aritmetice
  56.         dif = v[st[2]] - v[st[1]];
  57.         for (j = 2; j <= k; j++)
  58.             if (v[st[j]]- v[st[j-1]] == dif)    //verificam daca diferenta dintre ele este egala cu ratia
  59.             {
  60.                 contor ++;                      
  61.             }
  62.            
  63.  
  64.         if (contor == k-1)
  65.             return 1;
  66.         else
  67.             return 0;
  68.     }
  69.  
  70. }
  71.  
  72. void Afisare(int k)
  73. {
  74.     int i;
  75.     if (Solution(k))
  76.     {
  77.         for (i = 1; i <= k; i++)
  78.             fprintf(f2, "%d ", v[st[i]]);
  79.         nr++;
  80.         fprintf(f2, "\n");
  81.     }
  82.  
  83. }
  84.  
  85. int Valid(int k)
  86. {
  87.     if (k == 1)
  88.         return 1;
  89.     if (st[k] > st[k - 1])    
  90.         return 1;
  91.     return 0;
  92. }
  93.  
  94. void Back(int k)
  95. {
  96.     int i;
  97.     if (n >= k)
  98.         for (i = 1; i <= n; i++)
  99.         {
  100.             st[k] = i;
  101.             if (Valid(k))
  102.             {
  103.                 Afisare(k);
  104.                 Back(k + 1);
  105.             }
  106.         }
  107.     else
  108.         k--;
  109. }
  110.  
  111. int main()
  112. {
  113.     int k = 1;
  114.     f2 = fopen("out.txt", "w");
  115.     fprintf(f2, "  \n"); // lasam un rand liber sa punem numarul de solutii
  116.     Citire();
  117.     Sortare();
  118.     Back(1);
  119.     fseek(f2, 0, SEEK_SET);// punem cursorul la inceputul fiserului
  120.     fprintf(f2, "%d", nr);
  121.     fclose(f2);
  122.     return 0;
  123.     system("pause");
  124. }
Advertisement
Add Comment
Please, Sign In to add comment