Corrija o código: evite alterar um array
Seu amigo está tentando implementar uma transformação que decrementa os valores em camadas concêntricas. Para cada camada de 1 até times, decremente cada valor cujo índice seja maior ou igual a essa camada e menor que o tamanho do array menos essa camada.
std::vector<int> x{3, 3, 3, 3, 3, 3, 3};
// A implementação fornecida decrementa os valores de x diretamente.
change(x, 2); // {3, 2, 1, 1, 1, 2, 3}
change(x, 2); // incorreto, porque x já foi alteradoA função deve retornar o resultado transformado sem alterar a entrada original. Portanto, chamá-la repetidamente com a mesma entrada deve retornar sempre o mesmo resultado, e o x original deve permanecer inalterado.
Chamadas repetidas esperadas
change(x, 2); // {3, 2, 1, 1, 1, 2, 3}
change(x, 2); // {3, 2, 1, 1, 1, 2, 3}Notas
- Se o comportamento da mutação estiver confuso, execute a abordagem fornecida e inspecione a entrada depois de uma chamada.
- Dica: faça uma cópia da entrada antes de aplicar os decrementos.
- Esta transformação faz parte de uma solução para o problema do Tapete concêntrico.