Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef STATES_H
- #define STATES_H
- #include <iostream>
- #include <string>
- #include <vector>
- #include "candidates.h"
- struct StatePrimary {
- StatePrimary(int numDelegatesForState);
- ~StatePrimary();
- void addCandidate (std::string name, int nVotes);
- void assignDelegatesToCandidates();
- int getNumberOfDelegates (std::string name);
- private:
- int numDelegates;
- struct CandidateInfo
- {
- std::string name;
- int votesInThisState;
- int delegatesWonInThisState;
- };
- struct ListNode {
- CandidateInfo data;
- ListNode* next;
- ListNode (const CandidateInfo& candidate, ListNode* nxt = 0)
- : data(candidate), next(nxt)
- {}
- };
- ListNode* stateCandidates;
- };
- #endif
- #include "candidates.h"
- #include "states.h"
- #include <iostream>
- using namespace std;
- StatePrimary::StatePrimary(int numDelegatesForState)
- {
- numDelegates = numDelegatesForState;
- }
- void StatePrimary::addCandidate (std::string name, int nVotes)
- {
- CandidateInfo info = {name, nVotes, 0};
- stateCandidates.push_back (info);
- }
- void StatePrimary::assignDelegatesToCandidates ()
- {
- int totalVotes = 0;
- for (int i = 0; i < stateCandidates.size(); ++i)
- totalVotes += stateCandidates[i].votesInThisState;
- sortByVotes();
- int remainingDelegates = numDelegates;
- for (int i = 0; i < stateCandidates.size(); ++i)
- {
- int nDel = (numDelegates * stateCandidates[i].votesInThisState + (totalVotes-1)) / totalVotes;
- if (nDel > remainingDelegates)
- nDel = remainingDelegates;
- stateCandidates[i].delegatesWonInThisState = nDel;
- remainingDelegates -= nDel;
- }
- }
- int StatePrimary::getNumberOfDelegates (std::string name)
- {
- for (int i = 0; i < stateCandidates.size(); ++i)
- if (stateCandidates[i].name == name)
- return stateCandidates[i].delegatesWonInThisState;
- return 0;
- }
- void StatePrimary::sortByVotes()
- {
- for (int firstOutOfOrder = 1; firstOutOfOrder < stateCandidates.size();
- ++firstOutOfOrder)
- {
- CandidateInfo value = stateCandidates[firstOutOfOrder];
- int toBeMoved = firstOutOfOrder - 1;
- while (toBeMoved >= 0
- && value.votesInThisState > stateCandidates[toBeMoved].votesInThisState) {
- stateCandidates[toBeMoved+1] = stateCandidates[toBeMoved];
- --toBeMoved;
- }
- stateCandidates[toBeMoved+1] = value;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement