Guest User

Untitled

a guest
Jun 17th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. package com.unilecs.task102
  2.  
  3. import java.util.Collections.min
  4.  
  5. object Task102 {
  6. // массив мемоизации: индекс - число; значение - наименьшее кол-во операций для приведения его к единице
  7. private val memoArray = IntArray(10_000_000)
  8.  
  9. init {
  10. memoArray.fill(-1)
  11. memoArray[0] = 0
  12. memoArray[1] = 0
  13. memoArray[2] = 1
  14. memoArray[3] = 1
  15. }
  16.  
  17. fun getMinOperationsCount(number: Int): Int {
  18. if (memoArray[number] != -1) {
  19. return memoArray[number]
  20. } else { // заполняем массив мемоизации для всех чисел от 4 до заданного
  21. var currentNumber = 4
  22. while (currentNumber <= number) {
  23. if (memoArray[currentNumber] == -1) {
  24. val minOperationsCount = 1 + min(listOf(
  25. if (currentNumber % 3 == 0) memoArray[currentNumber / 3] else Int.MAX_VALUE,
  26. if (currentNumber % 2 == 0) memoArray[currentNumber / 2] else Int.MAX_VALUE,
  27. memoArray[currentNumber - 1]
  28. ))
  29. memoArray[currentNumber] = minOperationsCount
  30. }
  31. currentNumber += 1
  32. }
  33. }
  34. return memoArray[number]
  35. }
  36. }
  37.  
  38. // Набор тестов
  39. package com.unilecs.task102
  40.  
  41. import com.unilecs.task102.Task102.getMinOperationsCount
  42. import org.junit.Test
  43. import org.junit.Assert.*
  44.  
  45. class Task102Test {
  46. @Test
  47. fun getMinOperationsCountTest1() {
  48. val minOperationsCount = getMinOperationsCount(9)
  49. assertEquals(2, minOperationsCount)
  50. }
  51.  
  52. @Test
  53. fun getMinOperationsCountTest2() {
  54. val minOperationsCount = getMinOperationsCount(11)
  55. assertEquals(4, minOperationsCount)
  56. }
  57.  
  58. @Test
  59. fun getMinOperationsCountTest3() {
  60. assertEquals(0, getMinOperationsCount(1))
  61. assertEquals(1, getMinOperationsCount(2))
  62. assertEquals(1, getMinOperationsCount(3))
  63. }
  64.  
  65. @Test
  66. fun bigNumberTest() {
  67. assertEquals(19, getMinOperationsCount(1_000_000))
  68. assertEquals(21, getMinOperationsCount(9_999_999))
  69. }
  70. }
Add Comment
Please, Sign In to add comment