You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于R语言的二分法与半确定性猜数字循环代码实现求助

两种猜数字策略的R语言实现

以下是针对两种猜数字循环的正确实现,保持与你原有代码一致的结构(循环100次并记录结果):


1. 确定性循环(中点向上取整)

每次猜测当前区间的中点(向上取整),根据结果动态缩小区间,直到猜中目标数字。

all_games_deterministic <- vector("list", 100)

for (i in 1:100){
  correct_i <- sample(1:100, 1)
  low <- 1
  high <- 100
  trial_index <- 0
  guess_i <- 0
  
  while(guess_i != correct_i){
    # 计算当前区间的中点(向上取整)
    guess_i <- ceiling((low + high) / 2)
    trial_index <- trial_index + 1
    
    # 根据猜测结果调整区间范围
    if (guess_i > correct_i){
      high <- guess_i - 1
    } else if (guess_i < correct_i){
      low <- guess_i + 1
    }
  }
  
  # 记录单局结果
  game_results_i <- data.frame(
    game_id = i,
    trial_count = trial_index,
    correct_num = correct_i,
    final_guess = guess_i
  )
  all_games_deterministic[[i]] <- game_results_i
}

# 合并所有局的结果
all_games_deterministic <- do.call("rbind", all_games_deterministic)

逻辑说明:以正确值68为例,初始区间1-100,首次猜51((1+100)/2=50.5,向上取整为51);51<68,区间调整为52-100,下一次猜76((52+100)/2=76);76>68,区间调整为52-75,下一次猜64((52+75)/2=63.5,向上取整为64),以此类推直至猜中68。


2. 半确定性循环(首次随机+后续范围缩小随机)

首次在全范围随机猜测,之后根据结果缩小区间,在新范围内随机猜测,直到猜中。

all_games_semi_deterministic <- vector("list", 100)

for (i in 1:100){
  correct_i <- sample(1:100, 1)
  low <- 1
  high <- 100
  trial_index <- 0
  guess_i <- 0
  
  while(guess_i != correct_i){
    trial_index <- trial_index + 1
    
    # 第一次猜测:全范围随机选数
    if (trial_index == 1){
      guess_i <- sample(low:high, 1)
    } else {
      # 后续猜测:在缩小后的区间内随机选数
      guess_i <- sample(low:high, 1)
    }
    
    # 根据猜测结果调整区间范围
    if (guess_i > correct_i){
      high <- guess_i - 1
    } else if (guess_i < correct_i){
      low <- guess_i + 1
    }
  }
  
  # 记录单局结果
  game_results_i <- data.frame(
    game_id = i,
    trial_count = trial_index,
    correct_num = correct_i,
    final_guess = guess_i
  )
  all_games_semi_deterministic[[i]] <- game_results_i
}

# 合并所有局的结果
all_games_semi_deterministic <- do.call("rbind", all_games_semi_deterministic)

逻辑说明:以正确值68为例,首次随机猜53(<68),区间调整为54-100;后续随机猜71(>68),区间调整为54-70;再随机猜65(<68),区间调整为66-70;继续随机猜70(>68),区间调整为66-69,最后随机猜中68,完全符合你给出的示例流程。


你原有Loop2草稿的问题说明

  1. 硬编码区间起始值50:这会导致区间缩小逻辑错误,应该根据上一次的猜测结果动态调整区间的上下限,而非固定从50开始
  2. 硬编码猜测次数:用guess_1、guess_2这类固定变量无法处理不确定的猜测次数,必须用循环实现
  3. 变量引用错误:代码中guess_4引用了未定义的变量,属于逻辑错误

内容的提问来源于stack exchange,提问作者stats_noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 05:54:25