求两个整数的平均值

时间:2019-07-25 14:47:00

标签: c++

我正在尝试回答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;
}

0 个答案:

没有答案