Как структурировать более одного цикла for в оператор if? - PullRequest
1 голос
/ 25 мая 2019

Я пытаюсь решить проблему с массивом чисел и 3 для циклов в Java. Это включает в себя выяснение, какие 3 числа из массива складываются в конкретную сумму. Для этого теста я использовал сумму 9.

int nums[] = {1, 3, 5, 7, 9, 11, 13, 15};

for (int i = 0; i <= 7; i++) {
    for (int j = 0; j <= 7; j++)
        for (int y = 0; y <= 7; y++)

            if(nums[i] + nums[j] + nums[y] == 9)
                System.out.print(i + " " + j + " " + y);
}

Правильный ответ - 3 3 3, но этот вывод гласит:

0 0 30 1 20 2 10 3 01 0 21 1 11 2 02 0 12 1 03 0 0

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

Ответы [ 3 ]

1 голос
/ 25 мая 2019

Некоторые проблемы в вашем коде

  • Вы печатаете индексы System.out.print(i + " " + j + " " + y); вместо того, чтобы печатать цифры.
  • Вы хотите использовать println для печати всего на новой строке
  • Вы не должны брать элемент из списка несколько раз, каждый внутренний цикл должен игнорировать элементы, уже учтенные внешним циклом
  • 3,3,3 не является ответом, поскольку он содержит повторяющиеся элементы, ответ должен быть тем, который содержит различные элементы, т.е. 1,3,5

Обновленный код будет

for (int i = 0; i <= 7; i++) {
    for (int j = i+1; j <= 7; j++)
        for (int y = j+1; y <= 7; y++)

            if( nums[i] + nums[j] + nums[y] == 9)
                //Print the numbers on newline
                System.out.println(nums[i] + " " +nums[j] + " " + nums[y]);
}

Вывод будет

1 3 5                                                                                                                                                            

Если повторение разрешено, то все 3 цикла будут выполняться с 0, и ответ изменится

for (int i = 0; i <= 7; i++) {
    for (int j = 0; j <= 7; j++)
        for (int y = 0; y <= 7; y++)

            if( nums[i] + nums[j] + nums[y] == 9)
                //Print the numbers on newline
                System.out.println(nums[i] + " " +nums[j] + " " + nums[y]);
}

Тогда ответ будет

1 1 7                                                                                                                                                          
1 3 5                                                                                                                                                          
1 5 3                                                                                                                                                          
1 7 1                                                                                                                                                          
3 1 5                                                                                                                                                          
3 3 3                                                                                                                                                          
3 5 1                                                                                                                                                          
5 1 3                                                                                                                                                          
5 3 1                                                                                                                                                          
7 1 1 
0 голосов
/ 25 мая 2019

Вы тестируете одни и те же значения несколько раз, т.е. 1 + 1 + 7, 1 + 7 + 1, 7 + 1 + 1 - все тестируются.Используйте for for (int j = i; j <= 7; j++) и for (int y = j; y <= 7; y++).Обратите внимание, что существует несколько ответов, а не только 3 3 3, , если вы разрешаете использовать значения несколько раз .

0 голосов
/ 25 мая 2019

Правильный ответ - 3 3 3, но этот вывод гласит:

Нет, правильный ответ определенно не 3 3 3, поэтому, если я не ошибаюсь, вы хотите найтитриплет, который суммирует с вашей тестовой суммой, которая в данном случае равна 9, поэтому правильный ответ 1,3,5 Попробуйте:

for (int i = 0; i <= 7; i++) {
  for (int j = i + 1; j <= 7; j++)
   for (int y = j + 1; y <= 7; y++)

      if (nums[i] + nums[j] + nums[y] == 9)
       System.out.print(nums[i] + " " + nums[j] + " " + nums[y]);
}

Рабочий образец: https://ideone.com/5UAuGv

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