ValerianBenchea

BACKTRACKING Partitiile unui numar !NU FUNCTIONEAZA!

Oct 11th, 2021
1,160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.90 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. int x[101], n;
  4.  
  5. bool e_bun(int k)
  6. {
  7.     int s=0, i;
  8.     if(x[k]<=x[k-1] && k>1)
  9.         return 0;
  10.     for(i=1; i<=k; i++)
  11.         s+=x[i];
  12.     if(s>n)
  13.         return 0;
  14.     return 1;
  15. }
  16.  
  17. bool e_sol(int k)
  18. {
  19.     int s=0, i;
  20.     for(i=1; i<=k; i++)
  21.         s+=x[i];
  22.     if(s==n)
  23.         return 1;
  24.     else
  25.         return 0;
  26. }
  27.  
  28. void afis(int k)
  29. {
  30.     cout<<'\n';
  31.     for(int i=1; i<=k; i++)
  32.         cout<<x[i]<<' ';
  33. }
  34.  
  35. void back()
  36. {
  37.     int k=1;
  38.     x[k]=0;
  39.     while(k>0)
  40.     {
  41.         if(x[k]<n)
  42.         {
  43.             x[k]++;
  44.             if(e_bun(k))
  45.                 if(e_sol)
  46.                     afis(k);
  47.                 else
  48.                 {
  49.                     k++;
  50.                     x[k]=0;
  51.                 }
  52.         }
  53.         else
  54.             k--;
  55.     }
  56.  
  57. }
  58.  
  59. int main()
  60. {
  61.     cin>>n;
  62.     back();
  63.     return 0;
  64. }
  65.  
  66.  
Advertisement
Add Comment
Please, Sign In to add comment