Нахождение целых чисел, которые делятся на 6 или 7, но не оба - PullRequest
2 голосов
/ 27 июня 2009

Я пытаюсь написать программу, которая отображает целые числа от 1 до 100, которые делятся на 6 или 7 , но не на оба .

Вот мой код:

import acm.program.*;

public class Problem4 extends ConsoleProgram
{
    public void run()
    {
        for (int i = 1; i <= 100; i++)
        {
            boolean num = ((i % 6 == 0) || (i % 7 == 0));

            if (num == true)
            println(i + " is divisible");
        }
    }
}

Приведенный выше код показывает следующие ответы: 6,7,12,14,18,21,24,28,30,35,36 42 , 48,49,54,56,60,63,66,70,72,77, 78, 84 , 90,91,96,98

Теперь полужирные числа 42 и 84 делятся на 6 и 7. Теперь, если я изменю || на && в вышеприведенном коде, результат покажет только 42 и 84.

Какое изменение я должен сделать, чтобы убрать эти 2 числа из окончательного результата?

Ответы [ 8 ]

19 голосов
/ 27 июня 2009

XOR - это путь.

import acm.program.*;

public class Problem4 extends ConsoleProgram {
  public void run() {
    for (int i = 1; i <= 100; i++) {
      if ( (i % 6 == 0) ^ (i % 7 == 0) ) {
        println(i + " is divisible");
      }
    }
  }
}
8 голосов
/ 27 июня 2009

Вы должны сделать ваше состояние похожим на:

boolean num = (i % 6 == 0 || i % 7 == 0) && !(i % 6 == 0 && i % 7 == 0);

это в основном конвертирует ", но не оба " в код Java:)

5 голосов
/ 28 июня 2009

Вы также можете попробовать

boolean num = ((i % 6 == 0) != (i % 7 == 0));
5 голосов
/ 27 июня 2009

Вам нужна дополнительная проверка для "но не для обоих". Я думаю, что это должно быть:

логическое число = ((i% 6 == 0) || (i% 7 == 0)) && (i% 42! = 0);

2 голосов
/ 27 июня 2009

Подумайте о том, что значит быть делимым на 6 и 7 ... ответом на жизнь вселенной и всему.

1 голос
/ 27 июня 2009
import acm.program.*;

public class Problem4 extends ConsoleProgram
{
    public void run()
    {
        for (int i = 1; i <= 100; i++)
        {
            boolean num = ((i % 6 == 0) || (i % 7 == 0));
            boolean both = ((i % 6 == 0) && (i % 7 == 0));

            if ((num == true) &&  (both == false))
            println(i + " is divisible");
        }
    }
}
0 голосов
/ 11 сентября 2016

Немного упрощенная версия

for(int i=1; i<=100; i++) {

            // Either Divisible by 6 or 7 but not both


            if((i%6==0 && i%7!=0) ||( i%7==0 && i%6!=0)) {


                println(i);
0 голосов
/ 28 июня 2009

Вот фрагмент кода, который должен работать также в C ++, но изменить на булево ...

int value;
if ((value % 6 == 0 && value % 7 != 0) || (value % 6 != 0 && value % 7 == 0))
    cout << "Is " << value << " divisible by 6 or 7, but not both? true" << endl;
  else
    cout << "Is " << value << " divisible by 6 or 7, but not both? false" << endl;
...