Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.09 KB | None | 0 0
  1. Иванчо и Марийка много обичат да играят на играта “Колекционирай числата”. Играта е много проста, но в същото време доста занимателна за тях. В началото на играта се определят капацитет на колекцията. Това е броят елементи, които могат да се колекционират. Колекционирането се случва по доста прост начин - чрез хвърляне на два зара от съответния играч. Така получената двойка се записва в колекцията.
  2.  
  3. В играта основна важност играе операцията сумиране на двойки – това е операция при която се събират съответните елементи на две двойки и се получава нова двойка.
  4.  
  5. Разгледайте следната схема, за да се ориентирате как правилно да сумирате двойките:
  6.  
  7. 2
  8.  
  9. +
  10.  
  11. 3
  12.  
  13. =
  14.  
  15. 5
  16.  
  17. 5
  18.  
  19. 3
  20.  
  21. 8
  22.  
  23. При запълване на капацитета на колекцията, всички двойки числа се сумират, така че да се получи една двойка и тя става нов член на колекцията, а останалата част от двойките, които са били получени чрез заровете изчезват. Сумирането на двойките се случва в момента на добавянето на нова двойка, за която няма място!
  24.  
  25. Когато това се случи, играта все пак може да продължи. Новите елементи се добавят след двойката, получена от сумиране и при достигане на капацитета отново, двойките получени от заровете се сумират по същия начин, а резултатът се добавя след предната двойка получена от сумиране. ВАЖНО: В сумирането на участват двойките, които са получени като сумиране, а само тези, които са добавени от заровете.
  26.  
  27. Процесът се повтаря отново и отново, докато не се запълни цялата колекция с двойки, получени от сумиране или пък ако не бъде дадена команда за край на играта.
  28.  
  29. За да се определи финалния резултат на всеки участник се вземат всички негови двойки, получени като резултат от сумиране и се извършва сумиране върху тях, така че да се получи една крайна двойка. Победител е този, при който абсолютната стойност на разликата между двете числа е най-малка.
  30.  
  31. Вашата задача е да създадете програма, която да следи играта за n на брой играчи и да отговаря на определени команди:
  32.  
  33. Първа подзадача (30 точки)
  34.  
  35. В рамките на тази подзадача трябва да реализирате две комадни:
  36.  
  37. Dice <играч> <число1> <число2> - тази команда задава на кой играч какви числа са се паднали.
  38.  
  39. CurrentPairSum <играч> - тази команда показва сумата от всички двойки във формат: (a, b), където a и b са съответно първия и втория елемент на получената двойка.
  40.  
  41.  
  42.  
  43. Втора подзадача (30 точки)
  44.  
  45. В рамките на тази подзадача реализирайте следната команда:
  46.  
  47. CurrentState <играч> - тази команда отпечатва всички двойки, които са съхранени в колекцията на дадения играч, без значение как са получени
  48.  
  49.  
  50.  
  51. Трета подзадача (20 точки)
  52.  
  53. Winner - тази команда отпечатва победителя във формат: “{играч} wins the game!”. Командата ще бъде викана само тогава, когато може да се определи еднозначно победител.
  54.  
  55.  
  56.  
  57. Четвърта подзадача (20 точки)
  58.  
  59. CurrentStanding - тази команда отпечатва класиране в намалящ ред, в което на всеки ред има информация за един играч във формат: “{играч} - (a, b)”. Където a и b са числата от двойката на съответния играч, с която той участва в класирането.
  60.  
  61.  
  62.  
  63. За ваше удобство получвате скелет за решението на тази задача.
  64.  
  65. Клас Pair.cs
  66.  
  67. Този клас трябва да описва всяка двойка. Класът трябва да поддържа свойства, които съхраняват първата и втората стойност на двойката. Конструктор с два параметъра – числата от двойката. ToString метод и Difference метод, който връща абсолютната стойност на разликата между първия и втория елемент на двойката.
  68.  
  69. Pair.cs
  70.  
  71. class Pair {
  72.  
  73. public int First { get; set; }
  74.  
  75. public int Last { get; set; }
  76.  
  77.  
  78.  
  79. public Pair(int first, int last)
  80.  
  81. {
  82.  
  83. //TODO: Add code
  84.  
  85. }
  86.  
  87.  
  88.  
  89. public override string ToString()
  90.  
  91. {
  92.  
  93. //TODO: Add code
  94.  
  95. }
  96.  
  97.  
  98.  
  99. public int Difference()
  100.  
  101. {
  102.  
  103. //TODO: Add code
  104.  
  105. }
  106.  
  107. }
  108.  
  109.  
  110.  
  111. Клас CapacityList.cs
  112.  
  113. Този клас ще описва структурата, която съхранява всички двойки. По своята същност тя прилича на статичен списък, като тази структура трябва да има масив от обекти от клас Pair. Освен това трябва да разполага с конструктор, който създава масив от Pair обекти. Трябва да поддържате свойство Count, което да показва броят на двойките в масива, които могат да участват в класирането. Методът SumIntervalPairs() трябва да може да сумира всички двойки, започвайки от зададен стартов индекс – този метод ще се използва вътрешно от класа, за да определя сумата от двойките за всеки следващ елемент, който запълва. Методът Sum() трябва да може да сумира всички двойки, които имат право да участват в сумата за класирането. Методът Add(Pair item) има за цел да добавя нова двойка към структурата и да извиква методът за сумиране, когато структурата е на път да се запълни. PrintCurrentState() отпечатва информация за текущите двойки в масива.
  114.  
  115. CapacityList.cs
  116.  
  117. class CapacityList {
  118.  
  119. private const int InitialCapacity = 2;
  120.  
  121. private Pair[] items;
  122.  
  123.  
  124.  
  125. private int startIndex = 0; //показва първият индекс, от който започваме да сумираме текущите елементи
  126.  
  127. private int nextIndex = 0; //показва поредният индекс, на който можем да поставим елемент
  128.  
  129.  
  130.  
  131. public CapacityList(int capacity = InitialCapacity)
  132.  
  133. {
  134.  
  135. this.items = new Pair[capacity];
  136.  
  137. }
  138.  
  139.  
  140.  
  141. public int Count
  142.  
  143. {
  144.  
  145. get;
  146.  
  147. private set;
  148.  
  149. }
  150.  
  151.  
  152.  
  153. public Pair SumIntervalPairs()
  154.  
  155. {
  156.  
  157. //TODO: сумирайте двойките от startIndex до nextIndex
  158.  
  159. }
  160.  
  161.  
  162.  
  163. public Pair Sum()
  164.  
  165. {
  166.  
  167. //TODO: сумирайте двойките от 0 до this.Count – всички двойки, които имат право да участват в класирането
  168.  
  169. }
  170.  
  171.  
  172.  
  173. public void Add(Pair item)
  174.  
  175. {
  176.  
  177. //TODO: Добавяне на двойката
  178.  
  179. }
  180.  
  181.  
  182.  
  183. public void PrintCurrentState()
  184.  
  185. {
  186.  
  187. //TODO: отпечатайте всички двойки от 0 до nextIndex
  188.  
  189. }
  190.  
  191. }
  192.  
  193.  
  194.  
  195. Вход
  196.  
  197. На първи ред ще въведете капацитета на структурата. На всеки от следващите редове ще получавате някоя от командите. Въвеждането на команди приключва с командата End
  198.  
  199. Изход
  200.  
  201. За всяка от командите изведете изхода посочен по-горе.
  202.  
  203. Примери
  204.  
  205.  
  206.  
  207. Вход
  208.  
  209.  
  210.  
  211.  
  212.  
  213. Изход
  214.  
  215.  
  216.  
  217.  
  218.  
  219. Обяснение
  220.  
  221.  
  222.  
  223. 3
  224.  
  225. Dice Gosho 1 3
  226.  
  227. Dice Ivancho 5 4
  228.  
  229. Dice Mimi 2 3
  230.  
  231. Dice Gosho 2 5
  232.  
  233. Dice Ivancho 3 3
  234.  
  235. CurrentPairSum Gosho
  236.  
  237. Dice Gosho 1 1
  238.  
  239. CurrentPairSum Gosho
  240.  
  241. Dice Gosho 3 2
  242.  
  243. CurrentPairSum Gosho
  244.  
  245. Dice Ivancho 2 1
  246.  
  247. Dice Gosho 3 3
  248.  
  249. Dice Ivancho 2 2
  250.  
  251. CurrentPairSum Ivancho
  252.  
  253. Dice Mimi 6 6
  254.  
  255. Dice Mimi 3 2
  256.  
  257. Dice Mimi 1 6
  258.  
  259. CurrentPairSum Mimi
  260.  
  261. End
  262.  
  263. (0, 0)
  264.  
  265. (0, 0)
  266.  
  267. (4, 9)
  268.  
  269. (10, 8)
  270.  
  271. (11, 11)
  272.  
  273. Първият път сумата на Гошо е (0, 0), т. като досега той не е изтеглил достатъчно двойки, за да формира двойка за сума по правилата. Вторият път Гошо вече има 3 двойки, но те не се сумират, докато не се прибави и четвърта. Едва на третия път Гошо вече има получена сума.
  274.  
  275.  
  276.  
  277. Иванчо има двойка (10, 8) - тя е от двойките (5, 4)+(3, 3)+(2, 1), a двойката (2, 2) не участва тъй като тя е само добавена, а не получена от сумиране.
  278.  
  279.  
  280.  
  281. Мими има двойка (11, 11) - тя е получена от двойките (2, 3)+(6, 6)+(3, 2), а (1, 6) не участва в сумата.
  282.  
  283.  
  284.  
  285. 3
  286.  
  287. Dice Ivancho 1 3
  288.  
  289. Dice Ivancho 5 4
  290.  
  291. Dice Ivancho 2 3
  292.  
  293. Dice Ivancho 2 5
  294.  
  295. Dice Ivancho 3 3
  296.  
  297. Dice Ivancho 1 1
  298.  
  299. CurrentState Ivancho
  300.  
  301. Dice Gosho 3 3
  302.  
  303. Dice Gosho 1 1
  304.  
  305. Dice Gosho 3 2
  306.  
  307. Dice Gosho 2 1
  308.  
  309. Dice Gosho 3 3
  310.  
  311. Dice Gosho 2 2
  312.  
  313. CurrentState Gosho
  314.  
  315. End
  316.  
  317. (8, 10)
  318.  
  319. (5, 8)
  320.  
  321. (1, 1)
  322.  
  323. (7, 6)
  324.  
  325. (5, 4)
  326.  
  327. (2, 2)
  328.  
  329.  
  330.  
  331. Първите три двойки са тези на Иванчо, като първата двойка е получена като сума на: (1, 3)+(5, 4)+(2, 3), а втората като сума на (2, 5)+(3, 3), третата двойка е двойката, която се е паднала от заровете.
  332.  
  333.  
  334.  
  335. Вторите три двойки са на Гошо. Първата е сума на (3, 3)+(1, 1)+(3, 2), втората е сума на (2, 1)+(3, 3).
  336.  
  337. 3
  338.  
  339. Dice Ivancho 1 3
  340.  
  341. Dice Ivancho 5 4
  342.  
  343. Dice Ivancho 2 3
  344.  
  345. Dice Ivancho 2 5
  346.  
  347. Dice Ivancho 3 3
  348.  
  349. Dice Ivancho 1 1
  350.  
  351. CurrentState Ivancho
  352.  
  353. Dice Gosho 3 3
  354.  
  355. Dice Gosho 1 1
  356.  
  357. Dice Gosho 3 2
  358.  
  359. Dice Gosho 2 1
  360.  
  361. Dice Gosho 3 3
  362.  
  363. Dice Gosho 2 2
  364.  
  365. CurrentState Gosho
  366.  
  367. CurrentPairSum Ivancho
  368.  
  369. CurrentPairSum Gosho
  370.  
  371. Winner
  372.  
  373. End
  374.  
  375. (8, 10)
  376.  
  377. (5, 8)
  378.  
  379. (1, 1)
  380.  
  381. (7, 6)
  382.  
  383. (5, 4)
  384.  
  385. (2, 2)
  386.  
  387. (13, 18)
  388.  
  389. (12, 10)
  390.  
  391. Gosho wins the game!
  392.  
  393. В сумата за изчисляване на победител в този случай не участват (1, 1) за Иванчо и (2, 2) за Гошо, т.като не е въведена 7 двойка, която да принуди структурата да извърши сумиране и затова сумата за изчисляване на победител се получава само от по 2-те двойки, които са получени като резултат от сумиране.
  394.  
  395. Гошо печели играта, т.като при него разликата е 2, а при Иванчо - 5.
  396.  
  397. 3
  398.  
  399. Dice Gosho 1 3
  400.  
  401. Dice Ivancho 5 4
  402.  
  403. Dice Mimi 2 3
  404.  
  405. Dice Gosho 2 5
  406.  
  407. Dice Ivancho 3 3
  408.  
  409. CurrentPairSum Gosho
  410.  
  411. Dice Gosho 1 1
  412.  
  413. CurrentPairSum Gosho
  414.  
  415. Dice Gosho 3 2
  416.  
  417. CurrentPairSum Gosho
  418.  
  419. Dice Ivancho 2 1
  420.  
  421. Dice Gosho 3 3
  422.  
  423. Dice Ivancho 2 2
  424.  
  425. CurrentPairSum Ivancho
  426.  
  427. Dice Mimi 6 6
  428.  
  429. Dice Mimi 3 2
  430.  
  431. Dice Mimi 1 6
  432.  
  433. CurrentPairSum Mimi
  434.  
  435. CurrentStanding
  436.  
  437. Winner
  438.  
  439. End
  440.  
  441. (0, 0)
  442.  
  443. (0, 0)
  444.  
  445. (4, 9)
  446.  
  447. (10, 8)
  448.  
  449. (11, 11)
  450.  
  451. Mimi - (11, 11)
  452.  
  453. Ivancho - (10, 8)
  454.  
  455. Gosho - (4, 9)
  456.  
  457. Mimi wins the game!
  458.  
  459. Тестът е аналогичен на първия, но с добавени команди за класиране и победител, като този път победител е Мими, т.като нейната разлика е 0.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement