我正在尝试回答Google Code Jam 2018练习中的数字猜测问题。解决方案的一个要素是能够找到两个整数的平均值,我尝试了两段代码。
下面的代码在行中显示时起作用
int mid = (nLowerLimit + nUpperLimit + 1) / 2;
但是当我写的时候有一个运行时错误
int mid = (nLowerLimit + nUpperLimit) / 2;
有人知道为什么将限制总和加1会有很大的不同吗?
谢谢!
int main() {
int nTotalNumOfTrials = 0;
scanf("%d", &nTotalNumOfTrials);
for(int i = 0; i < nTotalNumOfTrials; ++i)
{
int nLowerLimit, nUpperLimit;
scanf("%d %d", &nLowerLimit, &nUpperLimit);
scanf("%*d");
while(nLowerLimit < nUpperLimit) {
int mid = (nLowerLimit + nUpperLimit + 1) / 2;
printf("%d\n", mid);
fflush(stdout);
char res[12]; scanf("%s", res);
if(strcmp(res, "CORRECT") == 0)
{
break;
}
else if(strcmp(res, "TOO_SMALL") == 0)
{
nLowerLimit = mid;
}
else
{
nUpperLimit = mid - 1;
}
}
}
return 0;
}