Поиск целых чисел, которые делятся на 6 или 7, но не на оба сразу
-
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);