DEV Community

Altencir Junior
Altencir Junior

Posted on

Resolvendo problemas no HackerRank:Livro de lições especiais

Olá, seja bem vindo a mais um Resolvendo problemas no HackerRank: No caso de hoje, iremos ajudar Lisa a contar um número específico de exercícios de um livro de tarefas com base em alguns parâmetros criados por ela. Vejamos mais informações com a explicação e sua resolução.

Lisa's Workbook -

Lisa acabou de receber um novo livro de exercícios de matemática. Uma pasta de trabalho contém problemas de exercícios, agrupados em capítulos. Lisa acredita que um problema é especial se seu índice (dentro de um capítulo) for igual ao número da página onde está localizado. O formato do livro de Lisa é o seguinte:

  • Existem n capítulos no livro de exercícios de Lisa, numerados de 1 a n.
  • O capítulo th tem problemas arr[i], numerados de 1 a arr[i].
  • Cada página pode conter até k problemas. Somente a última página de exercícios de um capítulo pode conter menos de k problemas.
  • Cada novo capítulo começa em uma nova página, portanto, uma página nunca conterá problemas de mais de um capítulo.
  • A indexação do número da página começa em 1.
  • Dados os detalhes da apostila de Lisa, você pode contar o número de problemas especiais?

Exemplo:

  • arr = [4,2]
  • k = 3

A pasta de trabalho de Lisa contém arr[1] = 4 problemas para o capítulo 1 e arr[2] = 2 problemas para o capítulo 2. Cada página pode conter k = 3 problemas.

A primeira página conterá 3 problemas para o capítulo 1. O problema 1 está na página 1, por isso é especial.

A página 2 contém apenas o Capítulo 1, Problema 4, portanto, nenhum problema especial está na página 2.

Os problemas do Capítulo 2 começam na página 3 e há 2 problemas. Como não há problema 3 na página 3, também não há problema especial nessa página. Há 1 problema especial em sua pasta de trabalho.

Observação: consulte o diagrama na seção Explicação para obter mais detalhes.

Vejamos agora o algoritmo que irá encontrar os números especiais:

function workbook(n, k, arr) {
  //int n: the number of chapters
  //int k: the maximum number of questions per page
  //int arr[n]: the number of problems in each chapter

  let chapters=0;
  let pages=1;

    for(let i=0;i<n;i++){
      let m=k;
        for(let j=1;j<=arr[i];j++){
          if(j>m){
            pages++;
            m=m+k;
          }
          if(j==pages){
            chapters++;
          }
        }
      pages++;
    }
    return chapters;
}
Enter fullscreen mode Exit fullscreen mode

O primeiro loop for é usado para percorrer cada capítulo (de 0 a n-1). Dentro desse loop, a variável "maximum" é inicializada com o valor de "k", que representa o número máximo de questões que podem ser colocadas em uma página. Em seguida, um segundo loop for é usado para percorrer cada problema no capítulo (de 1 a arr[i]).

Para cada problema, o código verifica se a página atual já atingiu o número máximo de questões ("maximum"). Se sim, a variável "pages" é incrementada e "maximum" é atualizada para a próxima página. Se a página atual for igual ao número do problema ("j"), significa que este problema está na primeira página do capítulo e a variável "chapters" é incrementada.

Após o segundo loop for, a variável "pages" é incrementada, para que o próximo capítulo comece na página seguinte.

No final do primeiro loop for, a função retorna o valor da variável "chapters", que representa o número de capítulos que têm pelo menos uma questão na primeira página.

O resultado será:

5 3
4 2 6 1 10
Enter fullscreen mode Exit fullscreen mode

Assim, concluímos mais um Resolvendo problemas no HackerRank: até a próxima.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

AWS Q Developer image

Your AI Code Assistant

Generate and update README files, create data-flow diagrams, and keep your project fully documented. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay