基于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草稿的问题说明
- 硬编码区间起始值50:这会导致区间缩小逻辑错误,应该根据上一次的猜测结果动态调整区间的上下限,而非固定从50开始
- 硬编码猜测次数:用
guess_1、guess_2这类固定变量无法处理不确定的猜测次数,必须用循环实现 - 变量引用错误:代码中
guess_4引用了未定义的变量,属于逻辑错误
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

