Advertisement
Guest User

Untitled

a guest
Oct 1st, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.22 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <malloc.h>
  3.  
  4. #define N 9
  5. #define M 5
  6.  
  7.  
  8. void print_ar (int *a, int n)
  9. {
  10. for (int i=0;i<n;i++) printf ("%d ", a[i]);
  11. printf ("\n\n");
  12. }
  13.  
  14.  
  15.  
  16. /**
  17. Supponiamo che N persone abbiano deciso di competere per il premio sistemandosi in circolo ed eliminando la persona che occupa il posto M, stringendosi al crescere del numero degli
  18. eliminati. Il problema consiste nel determinare chi è il vincitore o, più in generale, nel determinare l’ordine con cui le persone vengono eliminate. Ad esempio, siano dati N=9 e M=5,
  19. le N persone siano numerate 1 2 3 4 5 6 7 8 9. Il programma leggerà i valori di N e M e stamperà la sequenza risultante 5 1 7 4 3 6 9 2 8. */
  20. void exitseq (int *ar, int n, int pos, int irem, int i)
  21. {
  22. if (n == 0)
  23. return;
  24.  
  25. if (i==irem-1 && ar[pos] != -1)
  26. {
  27. printf ("%d ", ar[pos]);
  28. ar[pos] = -1;
  29. return exitseq (ar, n-1, (pos+1) % N, irem, 0);
  30. }
  31. else if (ar[pos] != -1)
  32. return exitseq (ar, n, (pos+1) % N, irem, i+1);
  33. else
  34. return exitseq (ar, n, (pos+1) % N, irem, i);
  35. }
  36.  
  37.  
  38.  
  39.  
  40. int main ()
  41. {
  42. int *ar = (int *) malloc (sizeof(int) * N);
  43.  
  44. // Inizializzo con numeri a caso
  45. for (int i=0; i<N; i++) ar[i] = i+1;
  46.  
  47. print_ar (ar, N);
  48.  
  49. exitseq (ar, N, 0, M, 0);
  50. printf ("\n");
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement