Поиск целых чисел, которые делятся на 6 или 7, но не на оба сразу

StackOverflow https://stackoverflow.com/questions/1053433

  •  20-08-2019
  •  | 
  •  

Вопрос

Я пытаюсь написать программу, которая отображает целые числа от 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 числа из конечного результата?

Это было полезно?

Решение

вы должны сделать так, чтобы ваше состояние выглядело как:

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

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

Другие советы

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");
      }
    }
  }
}

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

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

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

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

Подумайте о том, что значит быть делимым на 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));
            boolean both = ((i % 6 == 0) && (i % 7 == 0));

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

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

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;

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

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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top