R语言计数函数/循环实现求助:按顺序统计满架书架数
书架摆满计数的R语言实现
针对你的需求,这里提供两种实现方式,分别用无循环的向量操作和循环来完成:
方法1:利用累积求和(高效无循环)
核心思路是先计算从下到上的书架累积容量,再统计有多少个累积值小于等于输入的书籍数量,以此得到已摆满的书架数。
count_full_shelves <- function(books) { # 从下到上的书架容量 shelf_capacities <- c(6, 4, 6, 4) # 计算从下到上的累积容量 cumulative_cap <- cumsum(shelf_capacities) # 统计满足条件的书架数量 sum(cumulative_cap <= books) }
测试示例:
count_full_shelves(5)→ 返回0(第一层6本未摆满)count_full_shelves(6)→ 返回1(第一层刚好摆满)count_full_shelves(10)→ 返回2(前两层共10本摆满)count_full_shelves(16)→ 返回3(前三层共16本摆满)count_full_shelves(20)→ 返回4(全部书架摆满)
方法2:循环实现
如果需要用循环逻辑,可依次遍历每个书架,判断剩余书籍是否能摆满当前书架,直到剩余书籍不足为止:
count_full_shelves_loop <- function(books) { shelf_capacities <- c(6, 4, 6, 4) full_count <- 0 remaining <- books for (cap in shelf_capacities) { if (remaining >= cap) { full_count <- full_count + 1 remaining <- remaining - cap } else { break } } full_count }
这个循环版本的测试结果和无循环版本完全一致。
为什么平均容量思路不可行
你之前尝试的平均容量计算逻辑错误在于,书架是按顺序从下到上摆满的,不是按平均分配。比如输入5时,虽然等于所有书架的平均容量(5本),但第一层需要6本才会摆满,所以平均思路会误判,必须按顺序累加判断才是正确逻辑。
内容的提问来源于stack exchange,提问作者BoxingIvy
相关产品推荐
相关产品推荐

