Gostaria de resolver esse problema JavaScript
Uma amiga de Alex deu uma coleção de filmes para ela de presente, e Alex está animada para assistir todos eles o mais rápido possível. A dos filmes é dada em um vetor durações [n], onde o n é o número do filme, e cada filme dura entre 1,01 e 3,00 horas (até duas casas decimais). Alex quer gastar no máximo 3,00 horas vendo filmes por dia, mas também assistir a coleção completa no mínimo número de dias possível. Alex nunca para assistir a um filme na metade. Isso é, se Alex escolheu um filme, Alex assistir um filme por completo no mesmo dia. Cheque o número mínimo de dias para assistir a uma coleção de filme completo. Exemplo:
n = 5
durações = [ 1,90, 1,04, 1,25, 2,5, 1,75 ]
Considerando um passo a passo de 1 em 1, Alex consegue assistir os filmes em mínimo de 3 dias:
1. Dia 1: primeiro e segundos filmes: 1,90 + 1,04 = 2,94 _< 3,00
2. Dia 2: quarto filme: 2,5 _< 3,00
3. Dia 3: terceiro e quinto filmes: 1,25 + 1,75 = 3,00_<
Descrição da Função:
Conclua uma função acharMinimoDeDias
acharMinimoDeDias tem o seguinte parâmetro:
- float durações [n] : a duração de cada filme.
Retornar:
- o número mínimo de dias para assistir a todos os filmes.
Restrições:
1 _< n _< 1000
1,01 _< durações [i] _< 3,0
Soluções para a tarefa
Resposta:
fun acharMinimoDeDias(arr : MutableList<Double>): Int { var day : Int = 0 var indexWhile1 : Int = 0 while (true){ if (arr.size <= indexWhile1) { break } for (indexFor in arr.indices){ if (((arr[indexFor] + arr[indexWhile1]) == 3.00) && (indexFor != indexWhile1)){ day += 1 arr[indexWhile1] = 0.0 arr[indexFor] = 0.0 break } } indexWhile1 ++ } val arr2 = arr.filter { it != 0.0 } if (arr2.isEmpty()){ return day } arr2.sorted() var cont : Double = 0.0 var indexWhile2 : Int = 0 while (true){ cont += arr2[indexWhile2] if (cont > 3.00){ day += 1 indexWhile2 -- cont = 0.0 } indexWhile2 ++ if (arr2.size == indexWhile2){ if (arr2[indexWhile2 - 1] < 3.00){ day += 1 } break } } return day}
Explicação:
eh isso!