Advertisement
Guest User

Untitled

a guest
Jan 29th, 2020
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. //VERSIONE CON DISPOSIZIONI RIPETUTE
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. void calcolaResto(int n, int *val, int *disp, int r);
  7. void calcolaRestoR(int pos, int n, int *val, int *dispR, int *sol, int r, int *num, int *best);
  8. int check(int *sol, int n, int *val, int r, int *num);
  9. int numeroMonete(int *sol, int n);
  10. int main()
  11. {
  12. int n = 3,r;
  13. int val[3] = {1,10,25};
  14. int disp[3] = {10,3,2};
  15. r = 30;
  16.  
  17. calcolaResto(n, val, disp, r);
  18. return 0;
  19. }
  20.  
  21. void calcolaResto(int n, int *val, int *disp, int r){
  22. int i=10000, j , k, num;
  23. int a;
  24. int *sol, *dispR;
  25. sol = calloc(n,sizeof(int));
  26. dispR = malloc(n*sizeof(int));
  27. for(j=0; j<n; j++)
  28. dispR[j] = disp[j];
  29. calcolaRestoR(0,n,val,dispR,sol,r,&num,&i);
  30.  
  31.  
  32. printf("Numero monete: %d", i);
  33. return;
  34. }
  35.  
  36. void calcolaRestoR(int pos, int n, int *val, int *dispR, int *sol, int r, int *num, int* best)
  37. {
  38. int i, ris;
  39. if(pos >= n){
  40. if(check(sol, n, val, r, num)){
  41. if((*num) < (*best))
  42. *best = *num;
  43. }
  44. return;
  45. }
  46. for(i = 0; i <= dispR[pos]; i++){
  47. sol[pos] = i;
  48. calcolaRestoR(pos+1, n, val, dispR, sol, r, num, best);
  49. }
  50. return;
  51. }
  52. int check(int *sol, int n, int *val, int r, int *num){
  53. int i, conta, ris;
  54. ris = 0;
  55. for(i = 0; i < n; i++){
  56. ris = ris + sol[i]*val[i];
  57. }
  58.  
  59. if(ris == r){
  60. (*num) = numeroMonete(sol ,n);
  61. return 1;
  62. }
  63. return 0;
  64. }
  65. int numeroMonete(int *sol, int n){
  66. int ris, i;
  67. ris = 0;
  68. for(i = 0; i < n; i++){
  69. ris += sol[i];
  70. }
  71. return ris;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement