求放置第K个玩具的盒子索引的Python代码实现
解决思路与Python代码
我们可以通过数学规律直接计算结果,避免逐个模拟(尤其是当K值很大时,这种方法效率更高):
规律分析
玩具的放置顺序存在固定周期,周期长度为2*(N-1),每个周期的序列是:1,2,...,N,N-1,...,2。
- 当
N=1时,所有玩具只能放入盒子1; - 对于
N>1的情况:- 计算第K个玩具在周期内的相对位置
pos = K % cycle,若pos=0说明刚好处于周期末尾,对应盒子编号为2; - 若
pos <= N,直接返回pos; - 若
pos > N,返回2*N - pos。
- 计算第K个玩具在周期内的相对位置
Python代码实现
def find_box(K, N): if N == 1: return 1 cycle = 2 * (N - 1) pos = K % cycle if pos == 0: return 2 elif pos <= N: return pos else: return 2 * N - pos # 测试示例 print(find_box(5, 3)) # 输出1,对应第5个玩具在盒子1 print(find_box(4, 3)) # 输出2,对应第4个玩具在盒子2 print(find_box(7, 4)) # 输出1,对应第7个玩具在盒子1 print(find_box(5, 4)) # 输出3,对应第5个玩具在盒子3
代码说明
- 先处理特殊场景
N=1,直接返回结果; - 通过取模运算快速定位K在周期内的相对位置;
- 根据相对位置所在的区间,直接计算出对应的盒子编号。
内容的提问来源于stack exchange,提问作者BANTY SARCASTER
相关产品推荐
相关产品推荐

