Skip to content
Programmingoneonone
Programmingoneonone
  • CS Subjects
    • Internet of Things (IoT)
    • Digital Communication
    • Human Values
    • Cybersecurity
  • Programming Tutorials
    • C Programming
    • Data structures and Algorithms
    • 100+ Java Programs
    • 100+ C Programs
  • HackerRank Solutions
    • HackerRank Algorithms Solutions
    • HackerRank C problems solutions
    • HackerRank C++ problems solutions
    • HackerRank Java problems solutions
    • HackerRank Python problems solutions
Programmingoneonone
Programmingoneonone

HackerRank Lisa’s Workbook problem solution

YASH PAL, 31 July 20241 December 2025

In this HackerRank Lisa’s Workbook problem solution You will be given the details for Lisa’s workbook, can you count its number of special problems?

Lisa just got a new math workbook. A workbook contains exercise problems, grouped into chapters. Lisa believes a problem to be special if its index (within a chapter) is the same as the page number where it’s located. The format of Lisa’s book is as follows:

  • There are n chapters in Lisa’s workbook, numbered from 1 to n.
  • The ith chapter has arr[i] problems, numbered from 1 to arr[i].
  • Each page can hold up to  problems. Only a chapter’s last page of exercises may contain fewer than k problems.
  • Each new chapter starts on a new page, so a page will never contain problems from more than one chapter.
  • The page number indexing starts at 1.

Given the details for Lisa’s workbook, can you count its number of special problems?

HackerRank Lisa's Workbook problem solution

HackerRank Lisa’s Workbook problem solution in Python programming.

if __name__ == '__main__':
    import sys
    n, k = map(int, sys.stdin.readline().strip().split())
    t = list(map(int, sys.stdin.readline().strip().split()))

    page = 0
    n_special = 0
    # Iterate over chapter
    for i in range(n):
        #print("chapter{}".format(i + 1))
        page += 1
        #print("page{}".format(page))
        # Iterate over problems in chapter
        for j in range(1, t[i] + 1):
            #print("tproblem{}".format(j))
            if j == page:
                n_special += 1
            if j != 0 and j % k == 0 and j < t[i]:
                page += 1
                #print("page{}".format(page))

    #print("---")
    print(n_special)

Lisa’s Workbook problem solution in Java programming.

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

public class Solution {

    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        int max = in.nextInt();
        int[] arr = new int[num];
        int numPages = 0;
        int curPage = 1;
        int count = 0;
        for(int i =0;i<num;i++){
            arr[i] = in.nextInt();
            for(int prob= 1;prob<=arr[i];prob++){
                int whatPage = prob/max;    
                if(prob == curPage) {
                    count++;
                    //System.out.println("HI chap"+(i+1)+" prob "+prob);
                }
                if(prob%max==0 && prob!=arr[i]){                    
                    curPage++;
                }               
            }      
            //System.out.println("END CHA"+curPage);
            curPage++;
        }
        System.out.println(count);
        //System.out.println(Arrays.toString(arr)+count);
    }
}

Problem solution in C++ programming.

#define _USE_MATH_DEFINES
#include <algorithm>
#include <complex>
#include <cstdio>
#include <functional>
#include <iostream>
#include <cfloat>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <time.h>
#include <vector>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> i_i;
typedef pair<ll, int> ll_i;
typedef pair<double, int> d_i;
typedef pair<ll, ll> ll_ll;
typedef pair<double, double> d_d;
struct edge { int v, w; };

ll MOD = 1000000007;
ll _MOD = 1000000009;
double EPS = 1e-10;

int main() {
	int N, K; cin >> N >> K;
	vector<int> a(N);
	for (int i = 0; i < N; i++)
		cin >> a[i];
	int x = 1, cnt = 0;
	for (int i = 0; i < N; i++) {
		int y = 0;
		for (int j = 1; j <= a[i]; j++) {
			if (j == x) cnt++;
			y++;
			if (y == K) {
				y = 0;
				x++;
			}
		}
		if (y) x++;
	}
	cout << cnt << endl;
}

Problem solution in C programming.

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

struct prob{
    int problem_no;
    int page_no;
};

int main() {

    /* Enter your code here. Read input from STDIN. Print output to STDOUT */
    int n, k, page_number=1, counter=0;
    scanf("%d %d", &n, &k);
    int chapter[n];
    for(int i=1;i<=n;i++){
        scanf("%d", &chapter[i]);
        struct prob problem[chapter[i]];
        for(int j=1;j<=chapter[i];j++){
            problem[j].problem_no=j;
            problem[j].page_no=page_number;
            if((j%k==0) && (j!=chapter[i]))
                page_number++;
        }
        page_number++;
        for(int j=1;j<=chapter[i];j++){
            if(problem[j].problem_no==problem[j].page_no)
                counter++;
        }
    }
    printf("%d", counter);
    return 0;
}

Problem solution in JavaScript programming.

function processData(input) {
    
    var top = input.split('n')[0];
    var bot = input.split('n')[1];
    
    var chapcount = top.split(' ')[0];
    var maxq = top.split(' ')[1];
    var chaps = bot.split(' ');
    var pageoffset = 1;
    var speccount = 0;
    var specmem = [];
    for(var a = 0; a < chaps.length; a++){
        var chapqs = chaps[a];
        var pagecount = Math.ceil(chapqs/maxq);
        var qs = [];
        for(var q = 1; q <= chapqs; q++){qs.unshift(q); }
        //for(var q = 1; q <= chapqs; q++){qs.push(q); }
        
        for(var p = pageoffset; p < pagecount + pageoffset; p++){
           specmem.push([]);
           //specmem[p-1].push(qs.slice());
            
            
           if(qs.length >=maxq){
               for(var s = 1; s <= maxq; s++){
                    specmem[p-1].push(qs.pop());
               }
           }
           else{
               //console.log(p+"LENGTH"+qs.length);
               var qslength = qs.length;
                for(var s = 0; s < qslength; s++){
                    //console.log(s+":"+p+":"+qs.pop())
                    specmem[p-1].push(qs.pop());
               }
            }
        }
     
        pageoffset = pageoffset+ pagecount;
    }
    
    for(var a = 0; a < specmem.length; a++){
        var mem = specmem[a];
        //console.log((a+1)+":"+mem);
        for(var b = 0; b < mem.length; b++){
            
            if(a+1 == mem[b])speccount++;
        }
    }
    console.log(speccount);
} 

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

process.stdin.on("end", function () {
   processData(_input);
});

Algorithms coding problems solutions AlgorithmsHackerRank

Post navigation

Previous post
Next post

Leave a Reply

Your email address will not be published. Required fields are marked *

CLOSE ADS
CLOSE ADS

Pages

  • About US
  • Contact US
  • Privacy Policy

Follow US

  • YouTube
  • LinkedIn
  • Facebook
  • Pinterest
  • Instagram
©2026 Programmingoneonone | WordPress Theme by SuperbThemes