在知乎上看到了一个回答,很有意思,原文链接 有没有什么男生才能看懂的笑话?

把文中的问题转换成一个编程题目:

一个公厕有一排小便池,现在有 n 个男人依次进去小便,假设第一个进去的人必定挑选最边上的小便池,后来进来的人挑选小便池遵循以下原则: 1、离我最近的人要离我尽可能地远 2、绝对不能接受和别人用相邻的小便池

假设整个过程中途没有人离开,为了让这 n 个男人能一起在这个公厕小便,那么这个公厕至少需要几个小便池? 写一个函数,接收人数 n 作为参数,返回至少需要的小便池个数。

这个题目中 依次进去 这个条件很关键,比如在 4 个人的情况时,至少需要 8 个小便池,7 个就不行。

我把题目发给室友看后,室友给出了一个递归倒推的方法,即:计算 m 个小便池最多能容纳多少人。

max_people(m) 表示 m 个小便池最多能容纳的人数,那么有:

m 为偶数时,max_people(m) = max_people(m / 2) + max_people(m / 2 + 1) - 1 m 为奇数时,max_people(m) = 2 * max_people((m + 1) / 2) - 1