2013-12-13 4 views
-7

У меня есть спецификации, как показано ниже:Использования вложенных циклов для

Напишите программу, которая выводит все перестановки из двух чисел, которые добавляют до 7. Подсказки: вы можете использовать два вложенные для петель.

Я сделал это, но знаю, что это неверно. Какие числа я должен ввести?

public class NestedFor { 

    public static void main(String[] args) { 

    for(int i=1; i<=3; i++) { 
     for(int j=1; j<=i; j++) { 
      System.out.println(i+ " " +j); 
     } 
    } 
    } 
} 
+1

возможно дубликат [перестановки и вложенное для петель в Java] (http://stackoverflow.com/questions/20567213/permutations-and-nested-for-loops-in-java) – LionC

+1

Кроме того, необходимо проверить если числа i, j составляют до 7 –

+3

не дубликат, этот код времени был предоставлен –

ответ

0
public class NestedFor { 

    public static void main(String[] args) { 
    for(int i=1; i<=7; i++) { 
     for(int j=1; j<i; j++) { 
     if (i + j == 7) { 
      System.out.println(i+ " " +j); 
     } 
     } 
    } 
    } 
} 
+0

(5,2) отсутствует. И это всего лишь пример. –

+0

спасибо, что это работает – user3099447

+0

@ user3099447 Я надеюсь, что для вашего же блага, вы понимаете, что в другом вопросе, который вы задали о проблеме 7 сумм, когда кто-то рекомендовал вам использовать вложенные для этого петли, они шутили и использовали вашего кажущегося невежества в этом вопросе. Пожалуйста, начните учиться, это единственный способ стать лучше. Шаги малыша. – nestedloop

0

Проверьте, если они добавляют до 7

if (i+j == 7) 
{ 
    //then they add to 7 
} 

Они оба должны быть в пределах от 1 до 7, хотя, если вы хотите, чтобы все числа от 1 до 7, которые добавляют до 7. Если вы хотите включить 0 затем начните там.

for (int i=1; i<=7; i++) 

... и вы можете исключить дублирующиеся

for(int i=1; i<=7; i++) { 
    for(int j=i; j<=7; j++) { //starts at i, not 1 
    /* Only check j against numbers equal to or lower than itself 
    /* to avoid duplicates 
    */ 
    } 
} 

Кроме

Имена классов должны начинаться с Капитолия письма, по соглашению, и в ГорбатыйРегистр (каждое слово в фразу имеются письма-капители

NestedFor 
1

. Ваши петли должны совпадать между 1 и 7. Затем в последнем цикле for вы должны проверить, равна ли сумма i и j равным 7. Если это так, напечатайте эти два числа.

1

Вам действительно не нужен вложенный цикл.

for (ii = 0; ii<8; ii++) { 
    System.out.printf("(%d, %d)\n",ii,7-ii); 
} 

Держите его простым.

Я знаю, что «подсказка» говорит, что вы можете использовать две вложенные петли; но, по моему опыту, немного соображения не следует игнорировать. Когда ваша проблема становится намного больше, то O (n), а не O (N^2), является огромной разницей ...

+0

@Masud thanks - исправлено. – Floris

1

Пара корректировок: я беру на себя смелость опубликовать решение, но, пожалуйста, убедитесь вы это понимаете!

for (int i = 0; i <= 7/*Need to consider all numbers from 0 to 7*/ ; ++i) { 
    for (int j = 0; j <= i /*Don't overoptimise: this is good enough and will not generate duplicates*/; j++) { 
      if (i + j == 7){ 
       System.out.println(i+ "," +j); 
      } 
    } 
} 

Это не самый быстрый способ; потратьте некоторое время на оптимизацию, как только у вас появится решение.

2

Вы почти находитесь. Вот вещи, которые вы должны рассмотреть:

  • Если предположить, что цифры должны быть положительными, внешний контур должен идти от 1 до 6 включительно, а не от 1 до 3.
  • Номера не обязательно должны быть в порядке. Таким образом, вы не должны останавливать внутренний цикл в i, также происходит от 1 до 6 включительно
  • Вы должны добавить if проверку перед печатью i и j.

Как только вы исправите три вещи выше, ваша программа должна работать. Удачи!

+0

@ssssteffff Вы хотите получить как «1 + 6», так и «6 + 1», иначе он не подберет некоторые из [* перестановок *] (http://www.mathsisfun.com/definitions/permutation .html). – dasblinkenlight

8

Попробуйте это (я предполагаю, что вы хотите неотрицательные числа, в противном случае у вас есть бесконечные возможности):

for(int i=0; i<=7, i++) 
{ 
    System.out.println(i + "+" + (7-i)); 
} 

Нет необходимости в два для петель.

Если вместо неотрицательных вы требуете положительных чисел, это стало бы:

for(int i=1; i<7, i++) 
{ 
    System.out.println(i + "+" + (7-i)); 
} 
+4

+1 для решения без вложенных циклов из nestedloop: D –

+3

Единственное стилистическое изменение, которое я бы сделал, это добавить круглые скобки вокруг '7-i'. Помимо этого, это приятное и краткое решение! –

+0

@ChrisForrence Спасибо, что указали это, отредактировано. – nestedloop

1

Попробуйте это:

for(int i=0;i<7;i++){ //First Loop 
    for(int j=7;j>0;j--){//Send loop 
     if((i+j)==7) System.out.println(i+" , "+j); //Permutations printed to terminal 
    } 
} 

Я предполагаю, что это сам объяснить, две петли идя навстречу друг Другие. Запустите его и посмотрите прекрасный результат;)

В математике понятие перестановки относится к акту перестановки (переупорядочения) объектов или значений.

+1

Тот же код может быть запущен с одним циклом: for (int i = 0, j = 7; i <7; i ++, j -) { if ((i + j) == 7) System.out .println (i + "," + j); } –

Смежные вопросы