Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- int n, st[20], v[20], nr;
- FILE* f2;
- void Citire()
- {
- int i, element;
- FILE* f = fopen("in.txt", "r");
- if (f == NULL)
- {
- printf("Eroare la deschiderea fisierului f");
- exit(1);
- }
- fscanf(f, "%d ", &n);
- for (i = 1; i <= n; i++)
- {
- fscanf(f, "%d", &element);
- v[i] = element;
- }
- fclose(f);
- }
- void Sortare()
- {
- int i, k, aux;
- do { //bubble sort
- k = 0;
- for (i = 1; i < n; i++)
- if (v[i] > v[i + 1])
- {
- k = 1;
- aux = v[i];
- v[i] = v[i + 1];
- v[i + 1] = aux;
- }
- } while (k);
- }
- int Solution(int k)
- {
- int dif = 0, contor = 0, j;
- if (k == 1)
- return 0;
- if (k == 2)
- return 1;
- else
- {
- //dif <=> ratia progresie aritmetice
- dif = v[st[2]] - v[st[1]];
- for (j = 2; j <= k; j++)
- if (v[st[j]]- v[st[j-1]] == dif) //verificam daca diferenta dintre ele este egala cu ratia
- {
- contor ++;
- }
- if (contor == k-1)
- return 1;
- else
- return 0;
- }
- }
- void Afisare(int k)
- {
- int i;
- if (Solution(k))
- {
- for (i = 1; i <= k; i++)
- fprintf(f2, "%d ", v[st[i]]);
- nr++;
- fprintf(f2, "\n");
- }
- }
- int Valid(int k)
- {
- if (k == 1)
- return 1;
- if (st[k] > st[k - 1])
- return 1;
- return 0;
- }
- void Back(int k)
- {
- int i;
- if (n >= k)
- for (i = 1; i <= n; i++)
- {
- st[k] = i;
- if (Valid(k))
- {
- Afisare(k);
- Back(k + 1);
- }
- }
- else
- k--;
- }
- int main()
- {
- int k = 1;
- f2 = fopen("out.txt", "w");
- fprintf(f2, " \n"); // lasam un rand liber sa punem numarul de solutii
- Citire();
- Sortare();
- Back(1);
- fseek(f2, 0, SEEK_SET);// punem cursorul la inceputul fiserului
- fprintf(f2, "%d", nr);
- fclose(f2);
- return 0;
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment