«За исключением чисел, которые делятся на 3 и 7, в то же время» может быть разбита следующим образом:
"divisible by 3 and 7 at the same time"
может быть выражена как:
"(divisible by 3 and divisible by 7)"
"Except"
может быть выражен как "Not"
.
Таким образом, вы получите:
Not (divisible by 3 and divisible by 7)
"делится на 3" является (a % 3) == 0
"делится на 7" является (a % 7) == 0
Отдает:
Not ((a % 3) == 0 and (a % 7) == 0)
В C# Not
становится !
и and
становится &&
, так что вы можете написать все это в C#, как:
if (!((a % 3) == 0 && (a % 7) == 0))
Сравнить с вашей неправилен:
if (a % 3 != 0 && a % 7 != 0)
Последняя неверно, поскольку это означает:
if (the number is not divisible by 3) and (the number is not divisible by 7
).
е. Это означает "Print the number if it is neither divisible by 3 nor divisible by 7"
, что означает "don't print the number if it's divisible by 3 or 7"
.
Чтобы понять, почему, рассмотрим сначала номер 6:
6 is not divisible by 3? = false (because 6 *is* divisible by 3)
6 is not divisible by 7? = true (because 6 is *not* divisible by 7)
Так что это разрешается в if false and true
, который, конечно же, false
.
Этот результат также применим к любому другому числу, делящемуся на 3, поэтому числа, делящиеся на 3, не будут напечатаны.
Теперь рассмотрим число 14:
14 is not divisible by 3? = true (because 14 is *not* divisible by 3)
14 is not divisible by 7? = false (because 14 *is* divisible by 7)
Так что это разрешается в if true and false
, который, конечно же, false
.
Этот результат также применим к любому другому числу, делящемуся на 7, поэтому числа, делящиеся на 7, будут напечатаны.
Надеюсь, вы сразу поймете, почему это неправильно.Если нет, то рассмотреть этот эквивалентный пример:
Предположим, что у нас есть четыре человека, Том плотник, Дик Карпентер, Гарри мясник и Том Мясник.
Этот вопрос эквивалентен тому, вы просите:
Name every person who is (not called Tom and is not a Butcher)
И вы должны быть в состоянии видеть, что это то же самое, спрашивая:
Name every person except (anyone called Tom or anyone who is a Butcher)
В обоих случаях ответ это Дик Плотник.
Вопрос, который вы должны задать:
Name every person except (anyone called Tom who is also a butcher)
На что ответ Том Карпентер, Дик Карпентер и Гарри Мясник.
Сноска: De Morgan's laws
Второй закон гласит:
"not (A or B)" is the same as "(not A) and (not B)"
Это эквивалент моего примера выше, где:
Name every person except (anyone called Tom or anyone who is a Butcher)
является эквивалентом :
Name every person who is (not called Tom and is not a Butcher)
где А и В anyone called Tom
является anyone who is a butcher
и not
записывается как except
.
Как примечание стороны, число делится на обоих 3 и 7, если, и только если, он делится на 21. – ach
'! (a% 3 == 0 && a% 7 == 0)' – imallett
@ Андрея Черняховского: лучшее обобщение - число делится на оба * a * и * b *, если оно делится на * LCM a и b *. – displayName