Advertisement
frentzy

backtracking lab. 4 (ex 2) (Irina #4)

Mar 20th, 2018
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.11 KB | None | 0 0
  1. // EX 1
  2.  
  3. #include <stdio.h>
  4. #include <conio.h>
  5.  
  6. int n = 5;
  7. int sol[20];
  8.  
  9. void BackTracking(int k);
  10. bool valid(int k);
  11. void afis();
  12.  
  13.  
  14. void main() {
  15.     //int k = 1;
  16.  
  17.     BackTracking(1);
  18.  
  19.     _getch();
  20. }
  21.  
  22. void BackTracking(int k) {
  23.     for (int i = 1; i <= n; i++) {
  24.         sol[k] = i;
  25.         if (valid(k)) {
  26.             if (k == n) {
  27.                 afis();
  28.             }
  29.             else {
  30.                 BackTracking(k + 1);
  31.             }
  32.         }
  33.     }
  34. }
  35.  
  36. bool valid(int k) {
  37.     for (int i = 1; i < k; i++)
  38.         if (sol[i] == sol[k])
  39.             return false;
  40.  
  41.     if (k % 2 == 0 && sol[k] != k)
  42.         return false;
  43.        
  44.     return true;
  45. }
  46.  
  47. void afis() {
  48.     for (int i = 1; i <= n; i++) {
  49.         printf("%d ", sol[i]);
  50.     }
  51.     printf("\n");
  52. }
  53. //#####################################################################################################
  54. // EX 2
  55. #include <stdio.h>
  56. #include <conio.h>
  57. #include <iostream>
  58.  
  59. using namespace std;
  60. int sol[20], n = 5;
  61.  
  62. bool valid(int k) {
  63.     int juma = (n / 2) + 1;
  64.  
  65.     for (int i = 1; i < k; i++) {
  66.  
  67.         if (sol[i] == sol[k]) {
  68.             return false;
  69.         }
  70.     }
  71.    
  72.  
  73.     if (k<juma) {
  74.         for (int i = 1; i < k; i++) {
  75.             if (sol[i] > sol[i + 1]) {
  76.                 return false;
  77.             }
  78.         }
  79.     }
  80.     else {
  81.         for (int i = juma; i < k; i++) {
  82.             if (sol[i] < sol[i + 1]) {
  83.                 return false;
  84.             }
  85.         }
  86.     }
  87.     return true;
  88. }
  89.  
  90. void afis() {
  91.     for (int i = 1; i <= n; i++) {
  92.         cout << sol[i] << " ";
  93.  
  94.     }
  95.     cout << endl;
  96. }
  97.  
  98. void BKT(int k) {
  99.     for (int i = 1; i <= n; i++) {
  100.         sol[k] = i;
  101.         if (valid(k)) {
  102.             if (k == n)
  103.                 afis();
  104.             else BKT(k + 1);
  105.         }
  106.     }
  107.  
  108. }
  109.  
  110. void main() {
  111.     BKT(1);
  112.     _getch();
  113. }
  114. //####################################################################################################
  115. // ex 3 ceva cu bani bancnote // algoritmul greedy mai pe scurt
  116.  
  117. #include <stdio.h>
  118. #include <conio.h>
  119. #include <iostream>
  120.  
  121. using namespace std;
  122.  
  123. int ban(int S, int e, int n) {
  124.     int p = 1, i = 0;
  125.     while (p*e <= S &&  i < n) {
  126.         p *= e;
  127.         i++;
  128.     }
  129.     return p;
  130. }
  131.  
  132.  
  133. void main() {
  134.     int s, n, e, b, nr = 0;
  135.     s = 444; // suma de bani
  136.     e = 2; //(asta e exponentul, adica 2 la puterea n , ala de mai jos)
  137.     n = 5;//reprezinta cea mai mare bancnota (2 la puterea 5 , 32, daca pui 6 cea mai mare bancnota e 64 lei)
  138.     while (s > 0) {
  139.         b = ban(s, e, n);
  140.         cout << s / b << " bancnota de " << b << " lei" << endl;
  141.         nr += s / b;
  142.         s %= b;
  143.     }
  144.     cout << nr << " bancnote";
  145.  
  146.     _getch();
  147. }
  148.  
  149. // s = suma de bani . trebuie platita folosind bancnote folosind puteri.... e e^0,e^1;
  150.  
  151.  
  152.  
  153. //############################################################################
  154. // ex versiunea 1 cu sali/ore
  155.  
  156. #include <stdio.h>
  157. #include <conio.h>
  158. #include <iostream>
  159. #include <time.h>
  160. using namespace std;
  161.  
  162. void Afisare(int a[], int n) {
  163.     for (int i = 0; i < n; i++) {
  164.         cout << a[i] << " ";
  165.         if (a[i] < 10)
  166.             cout << " ";
  167.     }
  168.     cout << endl;
  169. }
  170.  
  171. void SortCresc(int a[], int b[], int n) {
  172.     for (int i = 0; i < n - 1; i++) {
  173.         for (int j = i + 1; j < n; j++) {
  174.             if (a[i] > a[j]) {
  175.                 int aux;
  176.                 aux = a[i]; // metoda bulelor si pt "a" , si "b" in acelasi timp , ca sa sortezi 2 vectori deodata
  177.                 a[i] = a[j];
  178.                 a[j] = aux;
  179.  
  180.                 aux = b[i];
  181.                 b[i] = b[j];
  182.                 b[j] = aux;
  183.             }
  184.         }
  185.     }
  186. }
  187.  
  188. void main() {
  189.     // e problema cu salile alea si cu orele(curs), incepe cursu sa zicem la ora "5" cursu nu are cum sa se termine
  190.     // mai devreme de "5" , de asta te asiguri ca dureaza minim o ora,
  191.     // vectorul "a" contine de la "1" la "11" ore , iar b contine de la "1" la "12"
  192.     srand(time(NULL));
  193.     int n = 7, a[7], b[7];
  194.     for (int i = 0; i < n; i++) {
  195.         a[i] = rand() % 11 + 1; // se pune random numer de la 1 la 11
  196.         b[i] = rand() % 12 + 1; // se pune random numar de la 1 la 12
  197.         while (b[i] <= a[i]) { //daca numarul din b[i] e mai mic decat cel din a[i] (adica ora de terminare trebuie sa fie mai mare decat ora de incepere)
  198.             b[i] = rand() % 12 + 1; // repeta random pana cand b[i] devine mai mare decat a[i]
  199.         }
  200.     }
  201.     Afisare(a, n);
  202.     Afisare(b, n);
  203.  
  204.     SortCresc(a, b, n);
  205.     //  SortCresc(b, n);
  206.  
  207.     Afisare(a, n);
  208.     Afisare(b, n);
  209.  
  210.     _getch();
  211. }
  212.  
  213. //###################################################
  214. // esec v2
  215.  
  216. #include <stdio.h>
  217. #include <conio.h>
  218. #include <iostream>
  219. #include <time.h>
  220. using namespace std;
  221.  
  222. void Afisare(int a[], int n) {
  223.     for (int i = 0;i < n;i++) {
  224.         cout << a[i] <<" ";
  225.         if (a[i] < 10)
  226.             cout << " ";
  227.     }
  228.     cout << endl;
  229. }
  230.  
  231. void SortCresc(int a[],int b[], int n) {
  232.     for (int i = 0;i < n - 1;i++) {
  233.         for (int j = i + 1;j < n;j++) {
  234.             if (a[i] > a[j]) {
  235.                 int aux;
  236.                 aux  = a[i];
  237.                 a[i] = a[j];
  238.                 a[j] = aux;
  239.  
  240.                 aux = b[i];
  241.                 b[i] = b[j];
  242.                 b[j] = aux;
  243.  
  244.             }
  245.             if (a[i] == a[j]) {
  246.                 if (b[i] > b[j]) {
  247.                     int aux;
  248.                     aux = a[i];
  249.                     a[i] = a[j];
  250.                     a[j] = aux;
  251.  
  252.                     aux = b[i];
  253.                     b[i] = b[j];
  254.                     b[j] = aux;
  255.  
  256.                 }
  257.             }
  258.         }
  259.     }
  260. }
  261.  
  262. void main(){
  263.     srand(time(NULL));
  264.     int n = 7,a[7],b[7];
  265.     for (int i = 0;i < n;i++) {
  266.         a[i] = rand() % 11 + 1;
  267.         b[i] = rand() % 12 + 1;
  268.  
  269.         while (b[i] <= a[i]) {
  270.             b[i] = rand() % 12 + 1;
  271.         }
  272.        
  273.     }
  274.  
  275.  
  276.     SortCresc(a,b, n);
  277. //  SortCresc(b, n);
  278.  
  279.     Afisare(a, n);
  280.     Afisare(b, n);
  281.  
  282.     _getch();
  283. }
  284.  
  285. // s = suma de bani . trebuie platita folosind bancnote folosind puteri.... e e^0,e^1;
  286. //#####################################################################################
  287. //ideea lui David
  288.  
  289. #include <stdio.h>
  290. #include <conio.h>
  291. #include <iostream>
  292. #include <time.h>
  293. using namespace std;
  294.  
  295. void Afisare(int a[], int n) {
  296.     for (int i = 0; i < n; i++) {
  297.         cout << a[i] << " ";
  298.         if (a[i] < 10)
  299.             cout << " ";
  300.     }
  301.     cout << endl;
  302. }
  303.  
  304. void SortCresc(int a[], int b[], int n) {
  305.     for (int i = 0; i < n - 1; i++) {
  306.         for (int j = i + 1; j < n; j++) {
  307.             if (a[i] > a[j]) {
  308.                 int aux;
  309.                 aux = a[i]; // metoda bulelor si pt "a" , si "b" in acelasi timp , ca sa sortezi 2 vectori deodata
  310.                 a[i] = a[j];
  311.                 a[j] = aux;
  312.  
  313.                 aux = b[i];
  314.                 b[i] = b[j];
  315.                 b[j] = aux;
  316.             }
  317.         }
  318.     }
  319. }
  320.  
  321. void main() {
  322.     // e problema cu salile alea si cu orele(curs), incepe cursu sa zicem la ora "5" cursu nu are cum sa se termine
  323.     // mai devreme de "5" , de asta te asiguri ca dureaza minim o ora,
  324.     // vectorul "a" contine de la "1" la "11" ore , iar b contine de la "1" la "12"
  325.     srand(time(NULL));
  326.     int n = 7, a[7], b[7], k = 0, retine_rand;
  327.     for (int i = 0; i < n; i++) {
  328.         if (i >= 1) {
  329.             while (1) {
  330.                 retine_rand = rand() % 11 + 1;
  331.                 bool check = true;
  332.                 //int index;
  333.                 for (int index = 0; index < k; index++) {
  334.                     if (a[index] == retine_rand) {
  335.                         check = false;
  336.                     }
  337.                 }
  338.                 if (check) {
  339.                     a[i] = retine_rand;
  340.                     break;
  341.                 }
  342.             }
  343.         }
  344.         if (i == 0)
  345.         a[i] = rand() % 11 + 1; // se pune random numer de la 1 la 11
  346.         k++;
  347.        
  348.         if (a[i] == 11) {
  349.             b[i] = 12;
  350.         }
  351.         else {
  352.             b[i] = rand() % a[i] + 3; // se pune random numar de la 1 la 12
  353.         }
  354.         while (b[i] <= a[i]) { //daca numarul din b[i] e mai mic decat cel din a[i] (adica ora de terminare trebuie sa fie mai mare decat ora de incepere)
  355.             b[i] = rand() % a[i] + 3; // repeta random pana cand b[i] devine mai mare decat a[i]
  356.         }
  357.     }
  358.     Afisare(a, n);
  359.     Afisare(b, n);
  360.  
  361.     SortCresc(a, b, n);
  362.  
  363.     cout << "\nDupa sortare\n";
  364.     Afisare(a, n);
  365.     Afisare(b, n);
  366.  
  367.     _getch();
  368. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement