commit 22d5a8fa181c0b1698ef44a4563fce70a0debd70 Author: bot50 Date: Mon Feb 26 20:11:46 2024 +0000 kukemuna-cs50/problems/2024/x/plurality@20240226T201146.728668452Z diff --git a/plurality.c b/plurality.c new file mode 100644 index 0000000..b607267 --- /dev/null +++ b/plurality.c @@ -0,0 +1,103 @@ +#include +#include +#include + +// Max number of candidates +#define MAX 9 + +// Candidates have name and vote count +typedef struct +{ + string name; + int votes; +} candidate; + +// Array of candidates +candidate candidates[MAX]; + +// Number of candidates +int candidate_count; + +// Function prototypes +bool vote(string name); +void print_winner(void); + +int main(int argc, string argv[]) +{ + // Check for invalid usage + if (argc < 2) + { + printf("Usage: plurality [candidate ...]\n"); + return 1; + } + + // Populate array of candidates + candidate_count = argc - 1; + if (candidate_count > MAX) + { + printf("Maximum number of candidates is %i\n", MAX); + return 2; + } + for (int i = 0; i < candidate_count; i++) + { + candidates[i].name = argv[i + 1]; + candidates[i].votes = 0; + } + + int voter_count = get_int("Number of voters: "); + + // Loop over all voters + for (int i = 0; i < voter_count; i++) + { + string name = get_string("Vote: "); + + // Check for invalid vote + if (!vote(name)) + { + printf("Invalid vote.\n"); + } + } + + // Display winner of election + print_winner(); +} + +// Update vote totals given a new vote +bool vote(string name) +{ + for (int i = 0; i < candidate_count; i++) + { + if (strcmp(candidates[i].name, name) == 0) + { + candidates[i].votes++; + return true; + } + } + return false; +} + +// Print the winner (or winners) of the election +void print_winner(void) +{ + int max_votes = 0; + + // Find max votes + for (int i = 0; i < candidate_count; i++) + { + if (candidates[i].votes > max_votes) + { + max_votes = candidates[i].votes; + } + } + + // Find candidate(s) with max votes + for (int i = 0; i < candidate_count; i++) + { + if (candidates[i].votes == max_votes) + { + printf("%s\n", candidates[i].name); + } + } + + return; +}