как описать эту серию в коде? - PullRequest
1 голос
/ 14 апреля 2010

Я хотел бы найти формулу, описывающую эту серию. мне нужно установить логическое значение в зависимости от положительного целого числа. это довольно просто, но я застрял и чувствую себя немного глупо.

0 false
1 true
2 true
3 false
4 false
5 true
6 true
7 false
8 false
9 true
10 true
11 false
12 false
...

так что флаг меняется на каждое нечетное число

Ответы [ 4 ]

5 голосов
/ 14 апреля 2010

Ну, для флага, изменяющегося для каждого нечетного числа, похоже, что ваш логический параметр должен быть истинным, если и только если (n+3)%4 <= 1, где % - оператор по модулю:

 n   (n+3)%4   Boolean
--   -------   -------
 0      3       false
 1      0       true
 2      1       true
 3      2       false
 4      3       false
 5      0       true
 6      1       true
 7      2       false
 8      3       false
 9      0       true
10      1       true
11      2       false
12      3       false
::      :       :  :

Я специально добавил три вместо того, чтобы вычесть один, поскольку некоторые языки имеют разные представления о том, что должен делать оператор по модулю для отрицательных чисел. И имейте в виду, что это не зависит от языка. Если вы специально ищете решение на языке C или C, см. Отличный ответ здесь от Christoffer Hammarström ((n + 1) & 2 на всякий случай, когда он вообще исчезнет) - это гораздо более кратко в этих языки.

3 голосов
/ 14 апреля 2010

В C и других языках, где ненулевое значение true: (n + 1) & 2, и в других языках: (n + 1) & 2 != 0.

2 голосов
/ 14 апреля 2010

Вы можете сначала разделить значение int на 2, а затем проверить, является ли оно четным или нечетным.

boolean flag = ((i+1)/2)%2!=0;

Может быть, есть ошибка "один за другим", поэтому проверьте это.

N  (N+1)/2 ((N+1)/2)%2   compare != 0
0     0         0           false
1     1         1           true
2     1         1           true
3     2         0           false
4     2         0           false
5     3         1           true
6     3         1           true
7     4         0           false
8     4         0           false
9     5         1           true
...
0 голосов
/ 14 апреля 2010

Флаг изменяется при каждом нечетном числе, означает, что последний бит установлен в 1.

1 => 01, 3 => 11, ... 9 => 1001, 11 => 1011 и так далее.. так что вы можете просто проверить последний бит на каждом шаге и, когда он равен 1, установить флаг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...