a53

cifre_c

a53
Oct 7th, 2019
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. #include <iostream>
  2. #define NR 200
  3. using namespace std;
  4. int x[NR],v[NR],n,c;
  5.  
  6. void init(int k)
  7. {
  8. x[k]=0;
  9. }
  10. bool succesor(int k)
  11. {
  12. if(x[k]<n)
  13. return true;
  14. else
  15. return false;
  16. }
  17.  
  18. bool continuare(int k)
  19. {
  20. for(int i=1;i<=k-1;++i)
  21. if(x[k]==x[i]||v[x[k]]<v[x[i]])
  22. return false;
  23. return true;
  24. }
  25.  
  26. bool solutie(int k)
  27. {
  28. if (k==c+1)
  29. return true;
  30. else
  31. return false;
  32. }
  33.  
  34. void afisare()
  35. {
  36. if(v[x[1]])
  37. {
  38. for(int i=1;i<=c;++i)
  39. cout<<v[x[i]];
  40. cout<<'\n';
  41. }
  42. }
  43.  
  44. void backtracking()
  45. {
  46. int k=1;
  47. init(1);
  48. while(k!=0)
  49. if(solutie(k))
  50. {
  51. afisare();
  52. --k;
  53. }
  54. else
  55. if (succesor(k))
  56. {
  57. ++x[k];
  58. if(continuare(k))
  59. ++k;
  60. }
  61. else
  62. {
  63. init(k);
  64. --k;
  65. }
  66. }
  67. int main()
  68. {
  69. cin>>n>>c;
  70. int i=0;
  71. while(n)
  72. {
  73. v[++i]=n%10,n/=10;
  74. }
  75. n=i;
  76. for(i=1;i<n;++i)
  77. for(int j=i+1;j<=n;++j)
  78. if(v[i]<v[j])
  79. swap(v[i],v[j]);
  80. backtracking();
  81. return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment