Advertisement
edutedu

partitiile unui numar

Dec 4th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.91 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <stdlib.h>
  4.  
  5. using namespace std;
  6.  
  7. int x[100], n, nrsol, k, s;
  8.  
  9. void init(int k)
  10. {
  11. x[k]=0;
  12. }
  13.  
  14. int existaSuccesor(int k)
  15. {
  16. return x[k]<n;
  17. }
  18.  
  19. int cont(int k)
  20. {
  21. if(k>1 && x[k-1]>x[k])
  22. return 0;
  23. int s=0;
  24. for(int i=1; i<=k; i++)
  25. s+=x[i];
  26. return s<=n;
  27. }
  28.  
  29. int solutie(int k)
  30. {
  31. int s=0;
  32. for(int i=1; i<=k; i++)
  33. s+=x[i];
  34. return n==s;
  35. }
  36.  
  37. void tipar(int k)
  38. {
  39. nrsol++;
  40. for(int i=1; i<=k; i++)
  41. cout<<x[i]<<" ";
  42. cout<<endl;
  43.  
  44. }
  45.  
  46. void back(int k)
  47. {
  48. init(k);
  49. while(existaSuccesor(k))
  50. {
  51. x[k]=x[k]+1;
  52. if(cont(k))
  53. if(solutie(k))
  54. tipar(k);
  55. else
  56. back(k+1);
  57. }
  58. }
  59.  
  60. int main()
  61. {
  62. cout<<"numarul: ";
  63. cin>>n;
  64. back(1);
  65. cout<<"Nr. solutii: "<<nrsol;
  66. return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement