Alx09

Untitled

May 5th, 2020
381
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int v[20], a[20], i, n, k, m = 0, p;
  5.  
  6. void Init(int k) { // k este vârful stivei
  7. v[k] = 0;
  8. //initializeaz valoarea din vârful stivei
  9. }
  10.  
  11. int Succesor(int k) {
  12. if ( v[k] < n) { // se poate creste valoarea din vârf
  13. v[k]++; // se incrementeaz valoarea din vârf
  14. return 1; // functia a avut succes
  15. }
  16. else
  17. // nu se poate creste valoarea din vârf
  18. return 0;
  19. }
  20.  
  21. int rezolvare(int k) {
  22. int r;
  23. if (k < 2)
  24. return 0;
  25. r = a[v[k]] - a[v[k - 1]];
  26. if (r <= 0)
  27. return 0;
  28. for (i = 1; i < k; i++)
  29. if ((a[v[i + 1]] - a[v[i]]) != r)
  30. return 0;
  31.  
  32. return 1;
  33. }
  34.  
  35. int Valid(int k) {
  36. int i;
  37. for (i = 1; i < k; i++)
  38. if (v[i] == v[k]) return 0;
  39.  
  40. return 1;
  41. }
  42.  
  43. int Solution(int k) {
  44. return (k == n);
  45. }
  46.  
  47. void Print(int k) {
  48. printf("%d : ", ++m);
  49. for (i = 1; i <= k; i++)
  50. printf("%d ", a[v[i]]);
  51.  
  52. printf("\n");
  53.  
  54. }
  55.  
  56. void Back(int k) {
  57. // B. recursiv
  58. Init(k);
  59. while (Succesor(k)) {
  60. if (Valid(k)) {
  61. if(rezolvare(k))
  62. Print(k);
  63. if (!Solution(k))
  64. Back(k + 1);
  65. }
  66. }
  67. }
  68.  
  69. int main(void) {
  70. //printf("Dati n: ");
  71. FILE *f;
  72. f = fopen("in.txt", "r");
  73. fscanf(f, "%d", &n);
  74. for (i = 1; i <= n; i++)
  75. fscanf(f, "%d", &a[i]);
  76.  
  77. Back(1);
  78.  
  79. system("pause");
  80. return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment