Für Vorlesungen, bitte die Webseite verwenden. https://flavigny.de/lecture
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

78 строки
2.3KB

  1. #include "cpp_headers/fcpp.hh"
  2. bool deck_check(int deck[], int n) {
  3. for (int i = 0; i < n; i++) {
  4. // compare deck with number at this position
  5. // because initial deck is [0,1,2,3,..., n-1]
  6. if (deck[i] != i) {
  7. // if a difference is found, return false
  8. return false;
  9. }
  10. }
  11. // if no problem was found, deck is the original deck
  12. return true;
  13. }
  14. int main() {
  15. // query the amount of cards that should be shuffled
  16. int size = enter_int("How many cards do you want to be shuffled? ");
  17. // only shuffle even number of cards
  18. if (size <= 0, size % 2 != 0) {
  19. print("Invalid input, please enter an even number >= 2");
  20. return 0;
  21. }
  22. // initialize the deck of cards
  23. int deck[size];
  24. for (int i = 0; i<size; i++) {
  25. deck[i] = i;
  26. }
  27. // initialize a working array
  28. int newdeck[size];
  29. // perfect out shuffle
  30. for (int times = 1; ;times++) {
  31. // shuffle with perfect out
  32. for (int i = 0; i<size/2; i++) {
  33. newdeck[i*2] = deck[i];
  34. newdeck[i*2+1] = deck[i+size/2];
  35. }
  36. // check if newdeck is the original deck
  37. if (deck_check(newdeck, size)) {
  38. // print out the amount of iterations needed
  39. printf("We needed %d perfect out shuffle iterations to get back to the original deck\n", times);
  40. break;
  41. } else {
  42. // otherwise set deck to newdeck
  43. for (int i = 0; i <size; i++) {
  44. deck[i] = newdeck[i];
  45. }
  46. }
  47. }
  48. // reset the deck
  49. for (int i = 0; i<size; i++) {
  50. deck[i] = i;
  51. }
  52. // perfect in shuffle
  53. for (int times = 1; ;times++) {
  54. // shuffle with perfect in
  55. for (int i = 0; i<size/2; i++) {
  56. newdeck[i*2] = deck[i+size/2];
  57. newdeck[i*2+1] = deck[i];
  58. }
  59. // check if newdeck is the original deck
  60. if (deck_check(newdeck, size)) {
  61. // print out the amount of iterations needed
  62. printf("We needed %d perfect in shuffle iterations to get back to the original deck\n", times);
  63. break;
  64. } else {
  65. // otherwise set deck to newdeck
  66. for (int i = 0; i <size; i++) {
  67. deck[i] = newdeck[i];
  68. }
  69. }
  70. }
  71. }