The Solution to CS50 psets 3 plurality problem (2022)

cs50 psets 3 plurality

CS50 psets 3 plurality problem solution

In this problem set, you must create a program that runs a plurality election. So, let’s see how you can approach this problem and do it.

When it comes to elections, they come in all shapes and sizes. The monarch officially appoints the prime minister of the UK. Generally, it is done by choosing the leader of the political party that wins the most seats in the house of commons. When it comes to the United States, they use a multi-step Electrol-College process where citizens vote on how each state should allocate electors who then elect the President using the results of the election.

There are many ways to hold an election. But what is the simplest way? The simplest way to hold an election is via a method called the “plurality vote”. It is also known as “first-past-the-post” or “winner-take-all”. In this method, every voter gets to vote for one candidate. So at the end of the election, the candidate who has the most votes is declared the winner of the election.

So, in this problem set, we have to complete the C code of the given plurality.c file. Here is the code, for the cs50 psets 3 plurality problem.

#include <cs50.h>
#include <stdio.h>
#include <string.h>

// 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)
{
    // Loop through the count of candidates
    for (int i = 0; i < candidate_count; i++)
    {
        // Check if the vote is similar to the name of the candidate
        if (strcmp(candidates[i].name, name) == 0)
        {
            // if it is true then add a vote to the number of votes of that candidate
            candidates[i].votes++;
            return true;
        }
    }
    // else print invalid vote
    return false;
}

// Print the winner (or winners) of the election
void print_winner(void)
{
    // create a variable and set the value to 0
    int num_vote = 0;

    // iterate over the number of candidate
    for (int i = 0; i < candidate_count; i++)
    {
        // check each and every vote and which one got the majority
        if (candidates[i].votes > num_vote)
        {
            num_vote = candidates[i].votes;
        }
    }

    // Iterate over the list of candidates
    for (int i = 0; i < candidate_count; i++)
    {
        if (candidates[i].votes == num_vote)
        {
            printf("%s\n", candidates[i].name);
        }
    }

    return;
}

So, this is my solution to the cs50 psets 3 plurality problem.

You might also like to read: The solution to cs50 labs 3 sort problem (2022)

(Visited 18 times, 1 visits today)
Dasun Sucharith

Dasun Sucharith

Experienced Founder with a demonstrated history of working in the information services industry. Skilled in Software Development, Web Development, Mobile App Development, Public Speaking, and Management. Strong business development professional with a Bachelor's degree in Electronic Engineering focused on Computer Systems Networking and Telecommunications from SLIIT.
Share on facebook
Share on twitter
Share on linkedin