目录

1. 问题描述

2. 解题分析

3. 代码及测试


1. 问题描述

用绳子连接纸杯制作“纸杯电话”——这应该勾起了很多人对理科实验的回忆。如果把绳子拉直,对着一边的纸杯讲话,声音就可以从另一边的纸杯传出。

假设有几个小朋友以相同间隔围成圆周,要结对用纸杯电话相互通话。如果绳子交叉,很有可能会缠绕起来,所以结对的原则是不能让绳子交叉。

举个例子,如果有 6 个小朋友,则只要如下图一样结对,

就可以顺利用纸杯电话通话。也就是说,6 个人的时候,有 5 种结对方式。

求:有 16 个小朋友的时候,一共有多少种结对方式?

2. 解题分析

本题是一道动态规划问题。

以f(N)表示当有N个小朋友时的结对组合方式数可以推导出以下递推关系式:

递推过程以及笔算的结果如下所示:

3. 代码及测试

基于以上递推关系,代码就显得微不足道了。如下所示:

# -*- coding: utf-8 -*-
"""
Created on Wed Sep  8 07:41:50 2021@author: chenxy
"""import sys
import time
import datetime
import math
# import random
from   typing import List
# from   queue import Queue
# from   collections import deque
import itertools as itdef paringGame(N:int)->int:memo = dict()memo[0] = 1for n in range(2,N+1,2):        nums = 0for m in range((n//2)):# print(n,m)nums += memo[2*m] * memo[n-2-2*m]memo[n] = numsreturn memo[N]if __name__ == '__main__':        for N in range(16,30,4):            tStart = time.time()    nums = paringGame(N)        tCost  = time.time() - tStartprint('Pairing combination numbers for {0} = {1}, tCost = {2:6.3f}(sec)'.format(N,nums,tCost))   

运行结果:

上一篇:Q21: 异或杨辉三角形

下一篇:Q23: 二十一点通吃https://blog.csdn.net/chenxy_bwave/article/details/120234925https://blog.csdn.net/chenxy_bwave/article/details/120234925

本系列总目录参见:程序员的算法趣题:详细分析和Python全解

程序员的算法趣题Q22: 不缠绕的纸杯电话相关推荐

  1. php算法求出一个数可以被分解成多少个_程序员的算法趣题

    计算机的世界每天都在发生着深刻的变化.新操作系统的发布.CPU性能的提升.智能手机和平板电脑的流行.存储介质的变化.云的普及--这样的变化数不胜数. 在这样日新月异的时代中,"算法" ...

  2. LeetBook《程序员的算法趣题》Q18---水果酥饼日

    <程序员的算法趣题>-(日)增井敏克 , 书中为69 道数学谜题编写了解题程序, 编程语言为:Ruby,JavaScript,C语言. Q18 水果酥饼日   日本每月的 22 日是水果酥 ...

  3. 程序员的算法趣题Q50: 完美洗牌

    目录 1. 问题描述 2. 解题分析 2.1 思路1 2.2 思路2 3. 代码及测试 4. 后记 1. 问题描述 问题:对2n张牌洗牌,并求当1<=n<=100时,一共有多少个n可以使得 ...

  4. 程序员的算法趣题Q09: 落单的男女

    目录 1. 问题描述 2. 解题分析 3. 代码及测试 4. 思考 1. 问题描述 人们聚集在某个活动会场上,根据到场顺序排成一排等待入场,活动的主办人员,想把人们从队列的某个位置分成两组,想要让分开 ...

  5. 程序员的算法趣题Q55: 平分蛋糕

    目录 1. 问题描述 2. 解题分析 2.1 初始算法流程 2.2 优化 3. 代码及测试 4. 后记 1. 问题描述 2. 解题分析 这个题目第一感就是动态规划. 对于(m, n)形状(如下图所示, ...

  6. 程序员的算法趣题Q67: 不挨着坐是一种礼节吗?

    目录 1. 问题描述 2. 解题分析 2.1 基本思路 2.2 动态规划 2.3 算法流程 3. 代码及测试 4. 后记 1. 问题描述 注意,本问题不区分人,只考虑各个座位被占用的不同顺序的个数. ...

  7. 程序员的算法趣题Q68: 异性相邻的座位安排(1)

    目录 1. 问题描述 2. 解题分析 3. 代码及测试 4. 后记 1. 问题描述 这道题的描述应该是有问题的(不知道是原文的问题还是翻译的问题). 前面的描述中提到"前后左右的座位全是异性 ...

  8. 程序员的算法趣题Q57: 最快的联络网

    目录 1. 问题描述 2. 解题分析 2.1 学生的状态 2.2 学生状态转移 Case-T1:Do nothing, just wait Case-T2:给处于S0状态的学生打电话 Case-T3: ...

  9. 程序员的算法趣题:Q13 有多少种满足字母算式的解法(Java版)

    题目说明 所谓字母算式,就是用字母表示的算式, 规则是相同字母对应相同数字,不同字母对应不同数字, 并且第一位字母的对应数字不能是 0. 譬如给定算式 We * love = CodeIQ,则可以对应 ...

最新文章

  1. Android App性能监控工具
  2. equals方法中变量在前和在后的区别
  3. 计算机专用英语词汇pdf,计算机专用英语词汇1500词.pdf
  4. HDU 2152 Fruit (母函数)
  5. Windows内核结构
  6. 成都盛铭轩:详情页怎么设计
  7. 复旦大学电子信息专业考研上岸经验分享
  8. 量子计算机基地边缘,为什么三体人可以吊打地球文明?记忆继承、思想共享是关键...
  9. 直击|知乎App增加视频回答入口 视频流归到问题下
  10. 你还在用二分法求2个鸡蛋100层楼的问题吗?
  11. 职场人需要的2大礼物
  12. 攻防世界 web高手进阶区 9分题 favorite_number
  13. 利用PRM-DUL工具恢复oracle dbf文件中的数据
  14. 笨办法学python 习题46-windows
  15. 查看win信任的证书办法机构(CA机构的公钥)
  16. webpack转化es6语法
  17. 织梦网站木马生成一个php文件夹,dede织梦程序网站安全设置防范木马侵袭
  18. 枚举类 Enum使用
  19. linux提升普通用户权限
  20. 一个月份是第几季度输出

热门文章

  1. 迅龙中文开源Web搜索引擎的目标
  2. js jq 动态加载js文件
  3. 信捷伺服刚性调整_信捷电气(603416)2019年年报和2020年一季报业绩点评:国内小型PLC龙头 伺服、口罩机贡献新增量...
  4. 实现语音识别系统:手把手教你使用STM32C8T6和LD3320(SPI通信版)实现语音识别
  5. dxdiag - 检测windows10设备的Bios版本,显卡,声卡信息_拔剑-浆糊的传说_新浪博客...
  6. 时尚零售品牌如何有效开展邮件营销?
  7. 不就是一个订票网站吗,12306的核心模型设计思路究竟复杂在哪儿?
  8. datetime 取分钟_C#DateTime获取时分秒
  9. 成就系统工程师的职业生涯(1)
  10. 小学计算机实验考查总结,马店小学开展期末科学实验考查活动