Open In App

Different possible marks for n questions and negative marking

Last Updated : 08 Sep, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Given the number of questions as n     , and marks for the correct answer as p     and q     marks for the incorrect answer. One can either attempt to solve the question in an examination and get either p     marks if the answer is right, or q     marks if the answer is wrong, or leave the question unattended and get 0     marks. The task is to find the count of all the different possible marks that one can score in the examination.

Examples: 

Input: n = 2, p = 1, q = -1
Output: 5
The different possible marks are: -2, -1, 0, 1, 2

Input: n = 4, p = 2, q = -1
Output: 12

Approach: Iterate through all the possible number of correctly solved and unsolved problems. Store the scores in a set containing distinct elements keeping in mind that there is a positive number of incorrectly solved problems.

Below is the implementation of the above approach: 

C++

// CPP program to find the count of
// all the different possible marks
// that one can score in the examination
#include<bits/stdc++.h>
 
using namespace std;
 
    // Function to return
    // the count of distinct scores
    int scores(int n, int p, int q)
    {
        // Set to store distinct values
        set<int> hset;
 
        // iterate through all
        // possible pairs of (p, q)
        for (int i = 0; i <= n; i++)
        {
            for (int j = 0; j <= n; j++)
            {
 
                int correct = i;
                int not_solved = j;
                int incorrect = n - i - j;
 
                // if there are positive number
                // of incorrectly solved problems
                if (incorrect >= 0)
                    hset.insert(p * correct
                            + q * incorrect);
                else
                    break;
            }
        }
 
        // return the size of the set
        // containing distinct elements
        return hset.size();
    }
 
    // Driver code
    int main()
    {
 
        // Get the number of questions
        int n = 4;
 
        // Get the marks for correct answer
        int p = 2;
 
        // Get the marks for incorrect answer
        int q = -1;
 
        // Get the count and print it
        cout << (scores(n, p, q));
    }
 
// This code is contributed by
// Surendra_Gangwar

                    

Java

// Java program to find the count of
// all the different possible marks
// that one can score in the examination
 
import java.util.*;
 
class GFG {
 
    // Function to return
    // the count of distinct scores
    static int scores(int n, int p, int q)
    {
        // Set to store distinct values
        HashSet<Integer>
            hset = new HashSet<Integer>();
 
        // iterate through all
        // possible pairs of (p, q)
        for (int i = 0; i <= n; i++) {
            for (int j = 0; j <= n; j++) {
 
                int correct = i;
                int not_solved = j;
                int incorrect = n - i - j;
 
                // if there are positive number
                // of incorrectly solved problems
                if (incorrect >= 0)
                    hset.add(p * correct
                             + q * incorrect);
                else
                    break;
            }
        }
 
        // return the size of the set
        // containing distinct elements
        return hset.size();
    }
 
    // Driver code
    public static void main(String[] args)
    {
 
        // Get the number of questions
        int n = 4;
 
        // Get the marks for correct answer
        int p = 2;
 
        // Get the marks for incorrect answer
        int q = -1;
 
        // Get the count and print it
        System.out.println(scores(n, p, q));
    }
}

                    

Python3

# Python3 program to find the count of
# all the different possible marks
# that one can score in the examination
 
# Function to return the count of
# distinct scores
def scores(n, p, q):
     
    # Set to store distinct values
    hset = set()
 
    # Iterate through all possible
    # pairs of (p, q)
    for i in range(0, n + 1):
        for j in range(0, n + 1):
 
            correct = i
            not_solved = j
            incorrect = n - i - j
 
            # If there are positive number
            # of incorrectly solved problems
            if incorrect >= 0:
                hset.add(p * correct +
                         q * incorrect)
            else:
                break
 
    # return the size of the set
    # containing distinct elements
    return len(hset)
     
# Driver code
if __name__ == "__main__":
     
    # Get the number of questions
    n = 4
 
    # Get the marks for correct answer
    p = 2
 
    # Get the marks for incorrect answer
    q = -1
 
    # Get the count and print it
    print(scores(n, p, q))
     
# This code is contributed by Rituraj Jain

                    

C#

// C# program to find the count of
// all the different possible marks
// that one can score in the examination
using System;
using System.Collections.Generic;
 
class GFG
{
 
    // Function to return
    // the count of distinct scores
    static int scores(int n, int p, int q)
    {
        // Set to store distinct values
        HashSet<int>
            hset = new HashSet<int>();
 
        // iterate through all
        // possible pairs of (p, q)
        for (int i = 0; i <= n; i++)
        {
            for (int j = 0; j <= n; j++)
            {
 
                int correct = i;
                int not_solved = j;
                int incorrect = n - i - j;
 
                // if there are positive number
                // of incorrectly solved problems
                if (incorrect >= 0)
                    hset.Add(p * correct
                            + q * incorrect);
                else
                    break;
            }
        }
 
        // return the size of the set
        // containing distinct elements
        return hset.Count;
    }
 
    // Driver code
    public static void Main()
    {
 
        // Get the number of questions
        int n = 4;
 
        // Get the marks for correct answer
        int p = 2;
 
        // Get the marks for incorrect answer
        int q = -1;
 
        // Get the count and print it
        Console.WriteLine(scores(n, p, q));
    }
}
 
/* This code contributed by PrinciRaj1992 */

                    

Javascript

<script>
 
// JavaScript program to find the count of
// all the different possible marks
// that one can score in the examination
 
    // Function to return
    // the count of distinct scores
    function scores(n, p, q)
    {
        // Set to store distinct values
        let hset = new Set();
 
        // iterate through all
        // possible pairs of (p, q)
        for (let i = 0; i <= n; i++) {
            for (let j = 0; j <= n; j++) {
 
                let correct = i;
                let not_solved = j;
                let incorrect = n - i - j;
 
                // if there are positive number
                // of incorrectly solved problems
                if (incorrect >= 0)
                    hset.add(p * correct
                             + q * incorrect);
                else
                    break;
            }
        }
 
        // return the size of the set
        // containing distinct elements
        return hset.size;
    }
     
// Driver Code
 
           // Get the number of questions
        let n = 4;
 
        // Get the marks for correct answer
        let p = 2;
 
        // Get the marks for incorrect answer
        let q = -1;
 
        // Get the count and print it
        document.write(scores(n, p, q));
         
</script>

                    

Output
12


Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads