一个n边正三角形内有几个正三角形(面试题复盘)
题目: 一个n边正三角形内有几个正三角形
一、分析题目
这题首先的思想是递归。
对于递归的推演参考下图
一个n边正三角形内有几个正三角形的个数
y=y_n-1+delta(n)
d e l t a ( n ) = ∑ i = 1 n d e l t a ( n i ) delta(n) = \sum_{i=1}^n{delta(n_i)} delta(n)=i=1∑ndelta(ni)
所以求解delta(n)
是关键
从中可以看出显然 △(delta(n_i)
) 与 边长数i 有关。且有两部分组成,图中所示的上底和下底
这个计算有点类似图像池化的步长, i为正三角形的边长,1为步长
△ d o w n = n − ( i − 1 ) △_{down} = n - (i-1) △down=n−(i−1)
n-i
是确定上底的位置
△ u p = n − i − ( i − 1 ) ( i f △ u p > = 0 ; 0 ) △_{up} = n-i- (i-1) (if △_{up}>=0 ;0) △up=n−i−(i−1)(if△up>=0;0)
△ = △ u p + △ d o w n △ = △_{up} + △_{down} △=△up+△down
基于上述我们可以写出delta(n_i)
的python小片段
def delta_n_i(n, i):down_ = n -(i-1) up_ = n - i -(i-1) if n - i -(i-1)>=0 else 0 delta_n_i_value = down_ + up_ return delta_n_i_value for i in range(1, 6):print(f'边长为{i}时在边长为5的正三角形中需要增加',delta_n_i(5, i))"""
边长为1时在边长为5的正三角形中需要增加 9
边长为2时在边长为5的正三角形中需要增加 6
边长为3时在边长为5的正三角形中需要增加 3
边长为4时在边长为5的正三角形中需要增加 2
边长为5时在边长为5的正三角形中需要增加 1
"""
二、解题
def n_triangle(n):"""param n: 大正三角形的边长"""if n==0:return 0add_ = 0for i in range(n, 0, -1):add_ += delta_n_i(n , i)return add_ + n_triangle(n-1)# 两个合并起来就是
def n_triangle_(n):"""param n: 大正三角形的边长"""if n==0:return 0add_ = 0for i in range(n, 0, -1):down_ = n -(i-1) up_ = n - i -(i-1) if n - i -(i-1)>=0 else 0 add_ = down_ + up_ return add_ + n_triangle(n-1)for i in range(1, 7):print(f'{i}边正三角形中有{n_triangle(i)}个小的正三角形')"""
1边正三角形中有1个小的正三角形
2边正三角形中有5个小的正三角形
3边正三角形中有13个小的正三角形
4边正三角形中有27个小的正三角形
5边正三角形中有48个小的正三角形
6边正三角形中有78个小的正三角形
"""
反思,这种题型,画图的时候一定要大张的纸, 一点点好好数。用递归能比较方便的解决一些问题
一个n边正三角形内有几个正三角形(面试题复盘)相关推荐
- [UWP]实现一个轻量级的应用内消息通知控件
[UWP]实现一个轻量级的应用内消息通知控件 原文:[UWP]实现一个轻量级的应用内消息通知控件 在UWP应用开发中,我们常常有向用户发送一些提示性消息的需求.这种时候我们一般会选择MessageDi ...
- ACMNO.34 C语言-格式输出 请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶一行内输出三个实数。实数用6.2f格式输出。
题目描述 请设计输出实数的格式, 包括: ⑴一行输出一个实数:⑵一行内输出两个实数:⑶一行内输出三个实数. 实数用"6.2f"格式输出. 输入 一个实数,float范围 输出 输出 ...
- [转贴]现在在做一个WEB的站内消息系统,从工具栏位置弹出一徐徐上升的窗口...
现在在做一个WEB的站内消息系统, 想在用户登陆时, 如果有未读短消息 则从工具栏位置弹出一徐徐上升的窗口 显示提醒信息! <script language="JavaScript&q ...
- [js] 写一个方法判断数组内元素是否全部相同
[js] 写一个方法判断数组内元素是否全部相同 const isSameArray = function (array) {if (Array.isArray(array)) {return new ...
- 请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶一行内输出三个实数。实数用quot;6.2fquot;格式输出。
题目描述 请设计输出实数的格式,包括:⑴一行输出一个实数:⑵一行内输出两个实数:⑶一行内输出三个实数.实数用"6.2f"格式输出. 输入 一个实数,float范围 输出 输出3行, ...
- 如何判断一个点在多边形内
一.从三角形开始说起---怎么判断一个点在三角形内 三角形是最简单的多边形了.先说说三角形有哪些判断方法. 参考自:判断一个点是否在三角形内部 - 知乎 几种方法判断平面点在三角形内_独L无二的博客- ...
- java随堂练习02,求一个0~255范围内的整数的十六进制值,例如60的十六进制表示形式3C
/***作者:csdn风度翩翩猪肉佬* 日期:2021/4/4* 求一个0~255范围内的整数的十六进制值,例如60的十六进制表示形式3C* */ public class Exer16 {publi ...
- 2021年场(厂)内专用机动车辆安全管理新版试题及场(厂)内专用机动车辆安全管理模拟考试题
题库来源:安全生产模拟考试一点通公众号小程序 场(厂)内专用机动车辆安全管理新版试题是安全生产模拟考试一点通总题库中生成的一套场(厂)内专用机动车辆安全管理模拟考试题,安全生产模拟考试一点通上场(厂) ...
- 一个简单的动态内表alv案例
动态内表的问题一直没搞明白,每次都要复制粘贴. 动态内表的创建和使用主要有以下几点: 1.动态内表的创建,首先要定义动态结构,然后再根据定义的动态结构利用系统一个标准的method:"cl_ ...
最新文章
- JAVAOO 14 16章
- Vue的条件渲染指令
- opensll、libcurl库安装的使用,树莓派CSI摄像头的配置,树莓派调用智能API平台实现人脸识别、树莓派配置中文环境
- 在shop++二次开发中金额数据类型BigDecimal转换,注意细节。
- android 图标错误的是什么,如何修复:android.app.RemoteServiceException:从包中发布的错误通知*:无法创建图标:StatusBarIcon...
- morphia查询Mongo数据库通过ReadPreference主从数据库查询切换方法
- n986原生android,【极光ROM】-【三星NOTE20U(国行/港版/台版/韩版/美版) N986X-高通865P】-【V4.0 Android-R-UA3】...
- 组装计算机硬盘的选购,组装电脑教程:DIY组装电脑怎么选择硬盘
- 当前读和快照读的区别
- 谈读《三国志》之话说关羽——【istrangeboy精品史评】
- jmeter的${__time(,)}和${__timeShift(,,,,)}函数使用
- Word编辑公式时,公式后的序号靠下,不能再行中间显示
- 内卷时代,文章排版当然要快人一步(附公文排版插件)
- DDOS攻击防护HTTP篇
- php刷脸登录,PHP实现微信小程序人脸识别刷脸登录功能
- 虚实交融的元宇宙图景中社会科学的跃升
- 性能分析-云盘-sysbench IO测速脚本
- markdown之表格的使用
- realme真我V15国潮锦鲤手机:携《国家宝藏》IP筑开年之作
- 什么是站群以及站群的排名原理和作用解答