void main()
{
int match;
int n;
scanf("%d", &n);
int count = 0;
for (int i = 0; i < (1 << n); i ++)
{
match = 0;
for (int j = 0; j <= n - 3; j++)
{
if (((i & (7 << j)) ^ (5 << j)) == 0) // bin(7)=111; bin(5)=101
{
match = 1;
break;
}
}
if (match == 0)
count ++;
}
if (((i & (7 << j)) ^ (5 << j)) == 0) 这部分^(5<<j)这个我是理解的,比较各个位置的101.但是前面i&(7<<j)这部分猜想是2^n个10组合,但是不理解是如何得出的,在纸上硬算发现也不对头。求解答
使用
7<<j
保留有效的3个检查位(循环,一位一位检查),如果有则(i & (7 << j)
为<n-3-j个0>101<j个0>
,举个例子:n=7, i=44, j=3的场景: