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;
}
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
Assim, concluímos mais um Resolvendo problemas no HackerRank: até a próxima.
Top comments (0)