Подсчет яблок и апельсинов - PullRequest
0 голосов
/ 10 января 2019

Я видел, что этот вопрос задавался ранее, вот ссылка: Apple и Orange HackerRank . Я должен сказать вам, что мои сомнения не похожи на этого человека, просто я написал код, который отлично работает для большинства тестовых случаев, а для некоторых тоже не срабатывает.

Я проверил свой код и уверен, что мой код работает нормально.

Ссылка на вопрос: Вопрос Apple & Orange HackerRank

Постановка задачи

Учитывая дом человека, длина дома которого находится между переменными s и t , и у нас есть два дерева, одно - яблоко, другое - оранжевое. Поскольку нам дали некоторое расстояние от упавшего яблока и апельсинов соответственно, нам нужно найти те яблоки и апельсины, расстояние которых находится между s and t, или я должен сказать, что они попадают в дом человека xyz.

Формат ввода

  1. Первая строка содержит два целых числа через пробел, обозначающих соответствующие значения s и t.
  2. Вторая строка содержит два целых числа через пробел, обозначающие соответствующие значения a и b.
  3. Третья строка содержит два целых числа через пробел, обозначающих соответствующие значения m и n.
  4. Четвертая строка содержит разделенные пробелом целые числа, обозначающие соответствующие расстояния, на которые каждое яблоко падает от точки а.
  5. Пятая строка содержит разделенные пробелом целые числа, обозначающие соответствующие расстояния, на которые каждый апельсин падает от точки b.

Код

static void countApplesAndOranges(int s, int t, int a, int b, int[] apples, int[] oranges) {
  int appleSum=0, orangeSum=0, appleCount=0, orangeCount=0;

  for(int i : apples){
      appleSum = Math.abs(a+i);

      if(appleSum>=s && appleSum<=t)
        appleCount++;
  }

  for(int j : oranges){
      orangeSum = Math.abs(b+j);

      if(orangeSum>=s && orangeSum<=t)
        orangeCount++;
  }

  System.out.print(appleCount + "\n" + orangeCount);
}

Это мой кусок кода , который отлично работает в большинстве тестовых случаев , но этот случай на самом деле запутался в аду. Я на самом деле записываю суть одного из неудачных тестовых случаев и дам вам ссылку на то же самое, если вам это удастся, ребята.

Пройденный тестовый пример {1}

7 11
5 15
3 2
-2 2 1
5 -6

Пройденный тестовый кейс {2}

7 10
4 12
3 3
2 3 -4
3 -2 -4

Неудачный тестовый пример

37455 87275
35609 89610
73201 77971
19736 19374 -68796 0 -68800 -80005 -88383 -8147 73241 -33256 20227 0 
41620 30182 -95883 -88718 93989 44405 66495 87717 100000 -99845 -63634 
98450 -63318 23501 -39150 22335 4955 -98587 -13608 -95388 -41752 4959 
22375 -20025 -72101 -90667 -41569 94758 -26725 -53444 -8783 -81879 
57041 23682 -60064 -23505 2850 96653 18487 -6644 -90710 71994 21513 
36066 -65894 -9897 -86990 -97347 89784 88447 93133 12662 61685 -22914 
-39075 -96807 -80465 -53820 36851 -51794 -11967 36658 -75592 22004 -961 
66645 -93123 -65326 81871 -21785 -48242 -63552 32509 51078 -37656 
-14966 4017 -58411 9346 13544 -63028 -93738 93924 68463 55032 -10046 
87907 -20967 78972 85338 19584 45460 84382 -34690 -82301 14093 -60802 
4170 -90955 92241 -34932 68913 -22262 49469 -45729 7942 65753 17354 
-28647 93058 -43811 21411 8543 -44799 -71815 -40743 60445 -66946 -85090 
-96873 97385 -15317 54454 -21021 -60256 -41301 -98896 -97184 63098 
-60230 41376 42273 45807 58041 54260 21196 -85191 85267 -28305 30220 
-76826 82999 72627 7{-truncated-}

Ожидаемый результат

89610
19582

Есть еще кое-что, и ссылка здесь: Входные данные тестового примера

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: На самом деле я не спрашивал о решении, мой код работает, но я не знаю, почему эта логика не работает для таких входов.

Любая помощь будет принята с благодарностью! Спасибо :)

редактирует

Я попытался использовать long вместо int, в случае более высокого значения, такого как значение, которое есть в неудачном тестовом примере, но опять-таки он потерпел неудачу!

long appleSum=0, orangeSum=0, appleCount=0, orangeCount=0;

1 Ответ

0 голосов
/ 10 января 2019

Этот код прошел все тестовые случаи, что для вас пошло не так: вы используете Math.abs(), вы не должны этого делать, потому что могут быть и отрицательные значения суммы.

static void countApplesAndOranges(int s, int t, int a, int b, int[] apples, int[] oranges) {
    int appleCount = 0;
    int orangeCount = 0;
    for(int i:apples){
        if(s<=i+a && i+a<=t)
            appleCount++;
    }
    for (int j : oranges) {
        if (s <= j + b && j+b <= t)
            orangeCount++;
    }
    System.out.println(appleCount);
    System.out.println(orangeCount);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...