Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使该计划更有效?_C - Fatal编程技术网

C 如何使该计划更有效?

C 如何使该计划更有效?,c,C,我如何找到有多少个属性(nxor Z)>N的Z数(Z

我如何找到有多少个属性(nxor Z)>N的Z数(Z 这是一个简单的方法,但我真的不知道如何在O(logn)中实现它

\define\u CRT\u SECURE\u NO\u警告
#包括
#包括
int main()
{
int n;
intz;
int contor=0;
文件*in;
归档;
in=fopen(“in.txt”、“rt”);
if(in==NULL)
{
printf(“错误!”);
返回-1;
}
其他的
{
fscanf(在、%d、&n中);
对于(z=0;zn)
{
contor++;
}
}
}
out=fopen(“out.txt”、“wt”);
if(out==NULL)
{
printf(“错误!”);
返回0;
}
其他的
{
fprintf(输出,“%d”,续);
}
fclose(out);
fclose(in);
返回0;
}

我会给你一个强烈的提示,不是一个完整的解决方案,但它应该让你沿着正确的方向思考

关键是用二进制来思考。二进制中的任何数字都将是1,后跟0和1位的组合。例如:

100 = 1100100
 55 =  110111
 17 =   10001
XOR可以被认为是位翻转
N xor Z
获取
Z
中的所有1位,并翻转
N
中的相应位

如果您有一个与上面的数字类似的数字
N
,您可以翻转哪些位并以更大的数字结束?如果你把1换成0,它会变小。如果你把0换成1,它会变大

100
。将0翻转为1,它会变大:

100 = 1100100
108 = 1101100
将1翻转为0,它会收缩:

100 = 1100100
 68 = 1000100

该问题的解决方案将涉及计算
N
中的0位。(答案不仅仅是0位的计数,但它肯定会以某种方式使用该计数。)直觉上,这似乎是在正确的轨道上,您正在寻找对数解决方案,而数字具有对数位数。

我会给您一个强烈的提示,这不是一个完整的解决方案,但它应该让您沿着正确的轨道思考

关键是用二进制来思考。二进制中的任何数字都将是1,后跟0和1位的组合。例如:

100 = 1100100
 55 =  110111
 17 =   10001
XOR可以被认为是位翻转
N xor Z
获取
Z
中的所有1位,并翻转
N
中的相应位

如果您有一个与上面的数字类似的数字
N
,您可以翻转哪些位并以更大的数字结束?如果你把1换成0,它会变小。如果你把0换成1,它会变大

100
。将0翻转为1,它会变大:

100 = 1100100
108 = 1101100
将1翻转为0,它会收缩:

100 = 1100100
 68 = 1000100

该问题的解决方案将涉及计算
N
中的0位。(答案不仅仅是0位的计数,但它肯定会以某种方式使用该计数。)直觉上,这似乎是在正确的轨道上。您正在寻找对数解决方案,数字的位数是对数。

我知道,但使用i/o文件是一个要求可能会有问题?我知道,但使用i/o文件是一个要求可能会有问题?