In this HackerRank Mark and Toys Interview preparation kit, you have Given a list of toy prices and an amount to spend, determine the maximum number of gifts he can buy.


HackerRank Mark and Toys Interview preparation kit solution


Problem solution in Python programming.

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the maximumToys function below.
def maximumToys(prices, k):
    items = 0
    prices.sort()
    for p in prices:
        if p <= k:
            items += 1
            k -= p
        else:
            break
    return items

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    nk = input().split()

    n = int(nk[0])

    k = int(nk[1])

    prices = list(map(int, input().rstrip().split()))

    result = maximumToys(prices, k)

    fptr.write(str(result) + '\n')

    fptr.close()



Problem solution in Java Programming.

import java.io.*;
import java.util.*;

public class Solution {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int numItems = in.nextInt();
        int cash = in.nextInt();

        int[] items = new int[numItems];
        for (int i = 0; i < numItems; i++) {
            items[i] = in.nextInt();
        }

        System.out.println(findNumItemsPurchase(items, cash));
    }

    public static int findNumItemsPurchase(int[] items, int cash) {
        Arrays.sort(items);
        int count = 0;
        for (int i = 0; i < items.length; i++) {
            if (cash - items[i] > 0) {
                cash -= items[i];
                count += 1;
            } else {
                break;
            }
        }

        return count;
    }

}


Problem solution in C++ programming.

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() 
{
    long long n, k; cin >> n >> k;
    vector<int> prices;
    for(int i = 0; i < n; i++)
    {
        int p; cin >> p;
        prices.push_back(p);
    }
    sort(prices.begin(), prices.end());
    
    int t = 0;
    for(vector<int>::iterator it = prices.begin(); it != prices.end(); it++)
    {
        if(*it <= k)
        {
            t++;
            k -= *it;
        }
        else break;
    }
    cout << t << endl;
    
    return 0;
}


Problem solution in C programming.

#include<stdio.h>
void quicksort(int x[100000],int first,int last){
    int pivot,j,temp,i;
 
     if(first<last){
         pivot=first;
         i=first;
         j=last;
 
         while(i<j){
             while(x[i]<=x[pivot]&&i<last)
                 i++;
             while(x[j]>x[pivot])
                 j--;
             if(i<j){
                 temp=x[i];
                  x[i]=x[j];
                  x[j]=temp;
             }
         }
 
         temp=x[pivot];
         x[pivot]=x[j];
         x[j]=temp;
         quicksort(x,first,j-1);
         quicksort(x,j+1,last);
 
    }}

int main()
{
int n,k,i,avail=0,count=0;
scanf("%d",&n);
scanf("%d",&k);
int cost[n];
for(i=0;i<n;i++)
scanf("%d",&cost[i]); 
quicksort(cost,0,n-1);
while(avail<=k)
{
avail+=cost[count]; 
count++;
}  
printf("%d\n",count-1);    
return 0;    }


Problem solution in JavaScript programming.

var data = '';

var run = function () {
  var parts = data.split('\n'),
    totals = parts[0].split(' '),
    numToys = +totals[0],
    money = +totals[1],
    toyPrices = parts[1].split(' ').sort(function (a, b) { return a - b; }),
    total = 0,
    i = 0;

    while (total < money) {
      total += +toyPrices[i++];
    }

    console.log(--i);
}


process.stdin.resume();
process.stdin.setEncoding('ascii');
process.stdin.on('data', function (input) {
  data += input;
});

process.stdin.on('end', run);