Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. #ifndef STATES_H
  2. #define STATES_H
  3.  
  4. #include <iostream>
  5. #include <string>
  6. #include <vector>
  7. #include "candidates.h"
  8.  
  9.  
  10. struct StatePrimary {
  11. StatePrimary(int numDelegatesForState);
  12.  
  13. ~StatePrimary();
  14.  
  15.  
  16. void addCandidate (std::string name, int nVotes);
  17.  
  18.  
  19. void assignDelegatesToCandidates();
  20.  
  21.  
  22. int getNumberOfDelegates (std::string name);
  23.  
  24.  
  25. private:
  26. int numDelegates;
  27.  
  28. struct CandidateInfo
  29. {
  30. std::string name;
  31. int votesInThisState;
  32. int delegatesWonInThisState;
  33. };
  34.  
  35. struct ListNode {
  36. CandidateInfo data;
  37. ListNode* next;
  38.  
  39. ListNode (const CandidateInfo& candidate, ListNode* nxt = 0)
  40. : data(candidate), next(nxt)
  41. {}
  42. };
  43.  
  44.  
  45. ListNode* stateCandidates;
  46.  
  47. };
  48. #endif
  49.  
  50. #include "candidates.h"
  51. #include "states.h"
  52.  
  53. #include <iostream>
  54.  
  55. using namespace std;
  56.  
  57.  
  58. StatePrimary::StatePrimary(int numDelegatesForState)
  59. {
  60. numDelegates = numDelegatesForState;
  61. }
  62.  
  63.  
  64. void StatePrimary::addCandidate (std::string name, int nVotes)
  65. {
  66. CandidateInfo info = {name, nVotes, 0};
  67. stateCandidates.push_back (info);
  68. }
  69.  
  70.  
  71.  
  72. void StatePrimary::assignDelegatesToCandidates ()
  73. {
  74. int totalVotes = 0;
  75. for (int i = 0; i < stateCandidates.size(); ++i)
  76. totalVotes += stateCandidates[i].votesInThisState;
  77.  
  78. sortByVotes();
  79.  
  80. int remainingDelegates = numDelegates;
  81. for (int i = 0; i < stateCandidates.size(); ++i)
  82. {
  83. int nDel = (numDelegates * stateCandidates[i].votesInThisState + (totalVotes-1)) / totalVotes;
  84. if (nDel > remainingDelegates)
  85. nDel = remainingDelegates;
  86. stateCandidates[i].delegatesWonInThisState = nDel;
  87. remainingDelegates -= nDel;
  88. }
  89. }
  90.  
  91.  
  92. int StatePrimary::getNumberOfDelegates (std::string name)
  93. {
  94. for (int i = 0; i < stateCandidates.size(); ++i)
  95. if (stateCandidates[i].name == name)
  96. return stateCandidates[i].delegatesWonInThisState;
  97. return 0;
  98. }
  99.  
  100. void StatePrimary::sortByVotes()
  101. {
  102. for (int firstOutOfOrder = 1; firstOutOfOrder < stateCandidates.size();
  103. ++firstOutOfOrder)
  104. {
  105. CandidateInfo value = stateCandidates[firstOutOfOrder];
  106. int toBeMoved = firstOutOfOrder - 1;
  107. while (toBeMoved >= 0
  108. && value.votesInThisState > stateCandidates[toBeMoved].votesInThisState) {
  109. stateCandidates[toBeMoved+1] = stateCandidates[toBeMoved];
  110. --toBeMoved;
  111. }
  112.  
  113.  
  114. stateCandidates[toBeMoved+1] = value;
  115. }
  116.  
  117. }
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement