程序员的算法趣题Q22: 不缠绕的纸杯电话
目录
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: 不缠绕的纸杯电话相关推荐
- php算法求出一个数可以被分解成多少个_程序员的算法趣题
计算机的世界每天都在发生着深刻的变化.新操作系统的发布.CPU性能的提升.智能手机和平板电脑的流行.存储介质的变化.云的普及--这样的变化数不胜数. 在这样日新月异的时代中,"算法" ...
- LeetBook《程序员的算法趣题》Q18---水果酥饼日
<程序员的算法趣题>-(日)增井敏克 , 书中为69 道数学谜题编写了解题程序, 编程语言为:Ruby,JavaScript,C语言. Q18 水果酥饼日 日本每月的 22 日是水果酥 ...
- 程序员的算法趣题Q50: 完美洗牌
目录 1. 问题描述 2. 解题分析 2.1 思路1 2.2 思路2 3. 代码及测试 4. 后记 1. 问题描述 问题:对2n张牌洗牌,并求当1<=n<=100时,一共有多少个n可以使得 ...
- 程序员的算法趣题Q09: 落单的男女
目录 1. 问题描述 2. 解题分析 3. 代码及测试 4. 思考 1. 问题描述 人们聚集在某个活动会场上,根据到场顺序排成一排等待入场,活动的主办人员,想把人们从队列的某个位置分成两组,想要让分开 ...
- 程序员的算法趣题Q55: 平分蛋糕
目录 1. 问题描述 2. 解题分析 2.1 初始算法流程 2.2 优化 3. 代码及测试 4. 后记 1. 问题描述 2. 解题分析 这个题目第一感就是动态规划. 对于(m, n)形状(如下图所示, ...
- 程序员的算法趣题Q67: 不挨着坐是一种礼节吗?
目录 1. 问题描述 2. 解题分析 2.1 基本思路 2.2 动态规划 2.3 算法流程 3. 代码及测试 4. 后记 1. 问题描述 注意,本问题不区分人,只考虑各个座位被占用的不同顺序的个数. ...
- 程序员的算法趣题Q68: 异性相邻的座位安排(1)
目录 1. 问题描述 2. 解题分析 3. 代码及测试 4. 后记 1. 问题描述 这道题的描述应该是有问题的(不知道是原文的问题还是翻译的问题). 前面的描述中提到"前后左右的座位全是异性 ...
- 程序员的算法趣题Q57: 最快的联络网
目录 1. 问题描述 2. 解题分析 2.1 学生的状态 2.2 学生状态转移 Case-T1:Do nothing, just wait Case-T2:给处于S0状态的学生打电话 Case-T3: ...
- 程序员的算法趣题:Q13 有多少种满足字母算式的解法(Java版)
题目说明 所谓字母算式,就是用字母表示的算式, 规则是相同字母对应相同数字,不同字母对应不同数字, 并且第一位字母的对应数字不能是 0. 譬如给定算式 We * love = CodeIQ,则可以对应 ...
最新文章
- Android App性能监控工具
- equals方法中变量在前和在后的区别
- 计算机专用英语词汇pdf,计算机专用英语词汇1500词.pdf
- HDU 2152 Fruit (母函数)
- Windows内核结构
- 成都盛铭轩:详情页怎么设计
- 复旦大学电子信息专业考研上岸经验分享
- 量子计算机基地边缘,为什么三体人可以吊打地球文明?记忆继承、思想共享是关键...
- 直击|知乎App增加视频回答入口 视频流归到问题下
- 你还在用二分法求2个鸡蛋100层楼的问题吗?
- 职场人需要的2大礼物
- 攻防世界 web高手进阶区 9分题 favorite_number
- 利用PRM-DUL工具恢复oracle dbf文件中的数据
- 笨办法学python 习题46-windows
- 查看win信任的证书办法机构(CA机构的公钥)
- webpack转化es6语法
- 织梦网站木马生成一个php文件夹,dede织梦程序网站安全设置防范木马侵袭
- 枚举类 Enum使用
- linux提升普通用户权限
- 一个月份是第几季度输出
热门文章
- 迅龙中文开源Web搜索引擎的目标
- js jq 动态加载js文件
- 信捷伺服刚性调整_信捷电气(603416)2019年年报和2020年一季报业绩点评:国内小型PLC龙头 伺服、口罩机贡献新增量...
- 实现语音识别系统:手把手教你使用STM32C8T6和LD3320(SPI通信版)实现语音识别
- dxdiag - 检测windows10设备的Bios版本,显卡,声卡信息_拔剑-浆糊的传说_新浪博客...
- 时尚零售品牌如何有效开展邮件营销?
- 不就是一个订票网站吗,12306的核心模型设计思路究竟复杂在哪儿?
- datetime 取分钟_C#DateTime获取时分秒
- 成就系统工程师的职业生涯(1)
- 小学计算机实验考查总结,马店小学开展期末科学实验考查活动