如何为 C/C++ 编写二进制算法

Posted

技术标签:

【中文标题】如何为 C/C++ 编写二进制算法【英文标题】:How to write a binary algorithm for C/C++ 【发布时间】:2009-12-09 09:16:28 【问题描述】:

我在用 C/C++ 编写二进制算法时遇到了麻烦。 我的问题是这样的:

应用二进制算法在猜数游戏中搜索从 1 到 100 的数字。 用户将回答“y”以表示正确猜测,“h”如果猜测太高,或者“l”如果猜测太低。

我没有任何想法来应用它。谁能给我一个代码示例。

【问题讨论】:

我认为您的意思是分而治之的算法 您遇到问题的哪个方面? 初学者会犯错误,他们不值得一击。我正在+1 @benjamin 与错误无关。人们至少应该在寻求帮助之前尝试解决问题。所以 -1 没有关于 SO 的规则规定人们在寻求帮助之前必须尝试解决他们的问题。 【参考方案1】:

详细说明here加上各种实现。

int low = 1;
int high = 100;
while (low <= high) 
    int mid = (low + high) / 2;
    char answer = evaluateGuess(mid); //return l, h or y;
    if ('y'==answer) 
       return mid;
    
    if ('l' == answer) 
        low = mid + 1;
     else 
        high = mid - 1;
    

// If you get here the human player lied and the answer wasn't in [1..100] 

【讨论】:

【参考方案2】:

我假设您的意思是二进制搜索。***有loads of information。您也没有指定是否可以使用 stl。

基本伪代码是

  min := 1;
  max := N; array size: var A : array [1..N] of integer
  repeat
    mid := (min + max) div 2;
    if x > A[mid] then
      min := mid + 1
    else 
      max := mid - 1;
  until (A[mid] = x) or (min > max);

因此,在您的情况下,最小值为 0,最大值为 100,其中可以将上述算法更改为支持用户输入。所需要做的不是对数组进行比较检查,您只需要检查用户输入。

  min := 1;
  max := 100;
  repeat
    mid := (min + max) div 2;
    print mid;
    c := getChar();
    if c == 'h' then
      min := mid + 1
    else if c == 'l'
      max := mid - 1;
    else if c == 'y'
      return mid
  until (min > max);

但是,如果您需要更多帮助,则需要发布到目前为止的代码。

【讨论】:

【参考方案3】:
getRandomNumber(lower, upper)
  return random number between lower and upper;


main()
 lower = 0;
 upper = 101;
 num = getRandomNumber(lower, upper);
 response = askUser(num);
 while(response != Y)
  if (response==H)
    //if secret is higher than num
    lower = num;
  else
    //if secret is lower than num
    upper = num;

  num = getRandomNumber (lower, upper);
  response = askUser(num);
 

【讨论】:

这并不是真正的“二元”搜索,尽管它最终会到达那里

以上是关于如何为 C/C++ 编写二进制算法的主要内容,如果未能解决你的问题,请参考以下文章

用于十六进制的 c/c++ 中的 Aho-Corasick 算法

如何为能量补充游戏编写计时器算法

如何为给定的代码编写递归关系

大战蓝桥杯每日算法详解解析(C/C++)

Python数据结构与算法(10)---二进制数据结构Struct

Python数据结构与算法(10)---二进制数据结构Struct