算法趣题(一)

备战蓝桥杯——算法经典趣题(渔夫捕鱼)递归,递推,循坏算法                                  渔夫捕鱼某天晚上,A,B,C,D,,E,5个渔夫合伙捕鱼,捕到一定数量之后就停止捕鱼,各自到岸边休息。第一天早晨,渔夫A第一个醒来,他将鱼分作5份,把多余的一条仍会河中,拿到其中自己的一份回家去了。渔夫B第二个醒来,也讲鱼分作5份,扔掉多余的一条,拿走自己的一份。渔夫C第二个醒来,也讲鱼分作5份,扔掉多余的一条,拿走自己的一份。渔夫... 阅读详情

1. 回文十进制数

问题描述:求十进制、二进制、八进制表示都是回文数的所有数字中,大于10的最小数值。例如:9(十进制数)= 1001(二进制数)= 11(八进制数),这样的数字,但要找到一个大于10的最小的符合规则的数字。

分析

  • 因为二进制数字不能以0开头,所以二进制数字首位必定是数字1,根据回文数的特点可推知,二进制数最低位也必须是1。因此最低位是1的二进制数,必定是一个奇数,继而可以排除所有的偶数可能性。

算法:

  • 从大于10的最小的奇数——11开始遍历
  • 先判断十进制是否是回文数,再去判断二进制和十六进制是否符合
  • 由于不确定搜索范围的上限(虽然可以定义是int最大值),所以应该用while True来达到不断循环的目的,直到找到第一个三种进制都满足回文数,当前数字就是大于10的最小的回文数,跳出循环

Python代码实现

def palind_num():
    num = 11
    while True:
        """
        1. Python中的二进制与八进制都是有前缀的,由于前缀的存在,所以一旦翻转,需要删除前缀字段才能比较相同
        2. 使用切片将字符串翻转
        """
        if str(num) == str(num)[::-1] and bin(num).strip('0b') == bin(num)[::-1].strip('b0') and oct(num).strip('0o') == oct(num)[::-1].strip('o0'):
            break
        else:
            num += 2
    return num

result = palind_num()
print("十进制:", result)
print("二进制:", bin(result).strip('0b'))
print("八进制:", oct(result).strip('0o'))

# 十进制: 585
# 二进制: 1001001001
# 八进制: 1111

2. 数列的四则运算

问题描述:将一个十进制四位数的每一位数字,按照原来的顺序进行加减乘除运算至少一次,使得其结果为原数字的倒序,求范围在1000 ~ 9999内满足要求的数字。例如:1314:1 * 3 + 14 = 17,或1314:131 * 4 = 524这样的组合,直到满足存在一组运算,使得1、3、1、4这四个数字的计算结果为4131。

分析:

  • 很显然,对于一个四位数而言,若要满足其结果为原来的倒序的组成的数字,就意味着倒序的结果必定是一个四位数字。
  • 对于任何一个四位数而言,一旦出现减法和除法,这种会减少原来值的运算,肯定不可能得出新的四位数。同样的,对于加法亦是如此,因此加法在四位数与四则运算组合中,最大的可能情况是 999 + 9 = 1008,1008虽然是个四位数,但明显与范围内最大值不同。综上,只有乘法运算,才可能找到符合要求的数字。

算法:

  • 遍历1000 ~ 10000之间的所有四位数
  • 使用空字符串 ‘’ ,来实现将组合不同长度的数字,例如:1314:‘1’ + ‘’ + ‘2’ + ‘*’ + ‘3’ + ‘’ + ‘4’ = ‘12 * 34’
  • eval函数中,不允许出现数字前面带0的操作数,例如:eval(“1*001”),会报错!因此,对于每个单独的数字字符串前面的0,需要删除掉!采用,函数**lstrip(‘0’)**达到删除每个数字字符串前的0
  • 所有组合中,若最后一位数字是0,那么依据上一步算法,会将0删去。这就意味着出现数字后面带有乘号的字符串,例如:[‘7*’, ‘’, '5’, ‘’]组合的字符串就是 ‘75 *’,而eval(‘75 *’)操作是非法的!所有,必须删除所有数字字符串后面的乘号,用函数 *rstrip(’ ') 来删除
  • 所有组合中,可能会出现这样的情况:[‘7*’, ’ *’, ’ *’, ‘1’],当数字之间含有两个乘号时,这是一个幂乘运算,不是乘法运算。所以,只能保留一个乘号,用函数 replace() 变换成乘法运算
  • 为了防止出现这样的情况:[‘5’, ‘7’, ‘7’, ‘5’] 5775,即四个数字中没有加入运算符,因此,需要判断字符串的长度至少大于4位,即至少插入一个运算符

Python代码实现

opera = ['*', '']
for n in range(1000, 10000):
    num = str(n)
    for i in opera:
        for j in opera:
            for k in opera:
                num2 = num[0] + i + ' ' + num[1] + j + ' ' + num[2] + k + ' ' + num[3]
                num3 = [s.lstrip('0') for s in num2.split(' ')]
                num4 = ''.join(num3).rstrip('*').replace('**', '*')
                if len(num4) > 4:
                    if str(n)[::-1] == str(eval(num4)):
                        print(num3, num4, n)
                    
# ['5*', '9*', '3', '1']
# 5*9*31
# 5931
《趣题学算法》版权信息 版权信息 书名:趣题学算法 ISBN:978-7-115-44287-1 本书由人民邮电出版社发行数字版。版权所有,侵权必究。 您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。 我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。 如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。 ... 阅读详情

相关推荐

python算法趣味题目

python算法趣味题目.doc

算法趣题(二)

1. 翻牌问题 问题:有一组写着数字 111~100100100 的纸牌,按照从小到大的顺序排列着。最开始所有的纸牌都背面朝上。接下来按照规则翻牌:第一次从第 222 张纸牌开始,隔一张牌翻牌,于是第 2、4、6、8、...、1002、4、6、8、... 、1002、4、6、8、...、100 位置的牌会变成正面朝上;第二次从第 333张纸牌开始,每隔 222 张牌翻牌,于是第 3、6、9、......

Go的博客 701

MATLAB编程实战:通过SCPI命令高效读取普源示波器数据

本文详细介绍了如何利用MATLAB通过SCPI命令高效读取普源示波器数据,实现自动化测试与数据分析。文章从硬件连接到软件配置,再到核心代码编写与数据解析,提供了完整的实战指南,帮助工程师和科研人员摆脱手动操作,直接从示波器内存中精准读取数据,并利用MATLAB进行FFT频谱分析,大幅提升工作效率。

weixin_29176179的博客 544

算法-经典趣题-渔夫捕鱼

本文为joshua317原创文章,转载请注明:转载自joshua317博客算法-经典趣题-渔夫捕鱼 - joshua317的博客 一、问题 渔夫捕鱼问题是一个典型的递推问题,渔夫捕鱼问题的大意如下: 某天晚上,A、B、C、D、E 5个渔夫合伙捕鱼,捕到一定数量之后便停止捕鱼,各自到岸边休息。第二天早晨,渔夫A第一个醒来,他将鱼分作5份,把多余的一条扔回河中,拿其中自己的一份回家去了。渔夫B第二个醒来,也将鱼分作5份,扔掉多余的一条,拿走自己的一份。渔夫C第三个醒来,也将鱼分作5份,扔掉多余的一条,拿.

joshua317的博客 2146

别再死磕NFP了!用Python+遗传算法搞定异形件自动排版(附完整代码)

本文介绍了如何利用Python和遗传算法实现异形件智能排版,解决传统NFP方法计算复杂的问题。通过Shapely库处理几何运算和DEAP库搭建遗传算法框架,结合模拟退火策略避免局部最优,显著提升材料利用率。附完整代码和优化技巧,适用于服装裁剪、金属加工等行业。

weixin_26965807的博客 235

【机器学习】推理时计算优化——思维链(Chain-of-Thought)与慢思考范式 第一章:基础理论与认知框架 第二章:计算优化技术与前沿方法

过程监督在数学推理中展现出显著优势,因其能够定位错误发生的具体步骤,而非仅在最终答案处提供稀疏反馈。然而,高质量过程标注的获取成本高昂,这催生了基于自动验证器的近似方法。

VectorShift的博客 71

带答案分享-算法面试中的趣味题目

今天给大家分享一下去年校招面试过程中遇到一些比较有趣的题目,并附上我个人理解的答案,希望对大家校招有所帮助。1、25匹马,有一条只能5匹马比赛的赛道,我们无法计时,只能看...

小小挖掘机 3447

B站评论情感分析实战:Python批量爬取+BERT正负向分类,精准度92%(附完整代码)

用技术手段自动化挖掘用户真实情感,比人工分析更高效、更客观。这套方案的精度能稳定在90%左右,完全满足实际应用需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1025

算法-经典趣题-三色旗

本文为joshua317原创文章,转载请注明:转载自joshua317博客算法-经典趣题-三色旗 - joshua317的博客 一、问题 三色旗的问题最早由E.W.Dijkstra所提出,大致意思如下: 有一条绳子上面挂有白、红、蓝三种颜色的多面旗子,这些旗子的排列是无序的。现在要将绳子上的旗子按蓝、白、红三种颜色进行归类排列,但是只能在绳子上进行旗子的移动,并且每次只能调换两个旗子。问如何采用最少的步骤来完成三色旗的排列呢? 二、分析 我们来分析一下三色旗问题。假设绳子上共有10面旗子,蓝色旗.

joshua317的博客 1221

【华为OD技术面试真题 - 技术面】- 测试面试题(1)

专栏:华为OD面试真题精选 目录: 2024华为OD面试手撕代码真题目录以及八股文真题目录黑盒测试:白盒测试:基本功能验证:边界条件测试:空白输入测试:特殊字符和格式测试:响应时间测试:压力测试:针对在不同系统和设备上测试聊天窗口功能,以及网络正常的前置条件,我们可以增加以下测试用例:系统和设备:PC端测试:移动端测试:功能验证:前置条件:网络性能影响测试:Postman:SoapUI:JMeter:Rest-Assured:Tricentis Tosca:ReadyAPI:CI/CD工具集成:测试管理工

算法大师! 3689

24、虚拟地理信息系统:技术与应用的全面解析

本文全面解析了虚拟地理信息系统(虚拟GIS)的技术架构与应用前景。文章从地理空间数据的增长出发,探讨了虚拟GIS在地形、建筑、天气等多维度数据的交互式可视化技术,重点介绍了全球层次结构、多分辨率模型、缓存分页机制及交互导航方法。系统已应用于天气分析、城市规划、应急响应等领域,并展望了未来在数据处理、模拟操作、移动可视化及智能城市、文化遗产保护等方向的发展路径与技术挑战。

v4w5x6的博客 88

程序员的算法趣题Q23: 二十一点通吃

程序员的算法趣体Q23的详细解题分析和python代码

chenxy_bwave的专栏 1760

Linux系统中u-boot启动流程分析(详解)

代码部分,具体如下;

嵌入式技术开发 1991

程序员的算法趣题Q65: 图形的一笔画

程序员的算法趣题Q65: 图形的一笔画 详细解题分析和Python题解

chenxy_bwave的专栏 1669

【异常】插入Milvus时出现无法插入的情况提示io.milvus.exception.ParamException: The field: meta is not provided.

在使用 Milvus 进行向量搜索时遇到 io.milvus.exception.ParamException: The field: meta is not provided 错误通常意味着在创建集合(Collection)或者插入数据(Insert)时,某些必需的元数据字段没有被正确提供。检查集合创建,确保在创建集合时,你已经定义了所有必需的字段,并且正确地使用了 SchemaField 来定义这些字段。例如,如果你在创建集合时没有正确设置元数据字段,就会出现这个错误。请严格按照这个表结构创建。

奶爸的编程之路,也就一周冷个三天 923

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

程序员的算法趣题Q61: 不交叉一笔画下去

程序员的算法趣题Q61: 不交叉一笔画下去 详细解题分析和python题解

chenxy_bwave的专栏 1282

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

《妙趣横生的算法》(C语言实现)- 第5章 数学趣题(一)

数据范围很大,使用unsigned long long int类型可满足要求。另外,想清楚循环了多少次。可直接利用for循环解决问题,不过有些费时。欧几里得算法应该会快一些吧。复习了判断素数的函数。穷举法解决问题。穷举法解决问题。回文数字、回文字符串一类题型,清楚回文的含义。仔细观察可发现DCBA是ABCD的逆序数,可以用回文解决问题。不知道怎么把约束条件写出来诶,如何使用约束条件用程序写出来。穷举法。穷举法。递推。递推。求第12个月的兔子数量,不是累加每个月的兔子数量哦。判断素数函数要清楚。没有想法!

dream_aleaf的博客 1397

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

算法趣题 第三天

本篇介绍 本篇博客的题目来源于《程序员的算法趣题》。 这是一本非常有意思的算法书,不像其他的算法书从链表,二叉树等数据结构原理入手,通过一道道的题目,从实际问题出发,来使读者了解算法的运用。不过唯一不足之处在于书中的算法源码多用Ruby与JavaScript来实现,对于刚上手学习编程的读者来说,这两种语言不会是首选的编程语言。因此,博主使用Java对书中的源码进行重构实现,对使用Java的初学者能够明白其中的算法。 PS:博主的技术水平有限,可能代码会比较的臃肿冗余,在时间复杂度和空间复杂度上无法做到最优,

weixin_44018540的博客 288

第五天,趣题,守序者的尊严&&光骓者的荣耀

只要有一串1或0,就加一,可以自己试试。这个代码就是只要有一个分割就说明有一个串,cnt初始为1。最后打印就完事了,如果没看懂就在去康康题。可这是要在前缀和的情况下,不懂就康康我的第二天。先讲手续这的尊严,一道入门题,怎么变成普及-了?就是看你思维活不活跃,整个题就是判断有多少个01区间。哈哈哈哈,这道题我是服了,想了......屏幕机前的你,不要往后看了,自己想,真的很简单!好了,我来讲一下第二道题,感觉挠度飙升了吧?今天我更新了两天,这个文章有两个趣题,今天带大家过个瘾!

2401_87431790的博客 320

《程序员的算法趣题》-(日)增井敏克 Python解题 -- (Q24)

《程序员的算法趣题》-(日)增井敏克 , 书中为69 道数学谜题编写了解题程序, 编程语言为:Ruby,JavaScript,C语言。有兴趣的同学,可以购书阅读~ 在此更新个人编写的Python版,仅供学习使用。(运行环境:Python3.6) Q24 完美的三振出局     对喜爱棒球的少年而言,“三振出局”是一定要试一次的。这是一个在本垒上放置 9 个靶子,击打投手投来的球,命中靶子的...

cloudly89的专栏 322

C#百钱买百鸡

一百元买一百只鸡,公鸡、母鸡、小鸡各有几只?公鸡一只5元,母鸡一只3元,三只小鸡1元 代码: 第一种算法: for (int i = 0; i < 100; i++) { for (int j = 0; j < 100; j++) { if (7 ...

杰西笔记 2283

整数趣题(四位反序数)

/**************************************** * File Name : integer.c * Creat Data : 2015.1.24 * Author : ZY *****************************************/ /*整数趣题*/ /*四位反序数*/ /*设N是一个四位数,它的9倍恰好是其反

罗小黑の窝 1012

从零到一,这些有趣的算法畅销书,你看过吗?

还记得许多年前的夏天, 那时的我还是满头黑发, 拼命学习还研究算法, 还有一直鼓励我的她, 当时的我是那么快乐, 虽然刚刚踏入算法大门, 在教室、在宿舍、在食堂里, 研究着别人看不懂的公式。 如果有一天,我进入大厂,请把我留在,在那岗位上。 大学学习算法、反复做题的经历还历历在目,而我已在算法和深度学习这个“行当”摸爬滚打了4年。 许多人对算法是又爱又恨,其枯燥乏味的表象足以锤爆众多初学者,即便是那些网传的“圣经宝典”,你若想心情愉悦地啃下来,那也是不可能的,尤其是那些动不动就七八百页的“

weixin_42430871的博客 651

算法趣题 第二天

本篇介绍 本篇博客的题目来源于《程序员的算法趣题》。 这是一本非常有意思的算法书,不像其他的算法书从链表,二叉树等数据结构原理入手,通过一道道的题目,从实际问题出发,来使读者了解算法的运用。不过唯一不足之处在于书中的算法源码多用Ruby与JavaScript来实现,对于刚上手学习编程的读者来说,这两种语言不会是首选的编程语言。因此,博主使用Java对书中的源码进行重构实现,对使用Java的初学者能够明白其中的算法。 PS:博主的技术水平有限,可能代码会比较的臃肿冗余,在时间复杂度和空间复杂度上无法做到最优,

weixin_44018540的博客 203

算法趣题 第四天

本篇介绍 本篇博客的题目来源于《程序员的算法趣题》。 这是一本非常有意思的算法书,不像其他的算法书从链表,二叉树等数据结构原理入手,通过一道道的题目,从实际问题出发,来使读者了解算法的运用。不过唯一不足之处在于书中的算法源码多用Ruby与JavaScript来实现,对于刚上手学习编程的读者来说,这两种语言不会是首选的编程语言。因此,博主使用Java对书中的源码进行重构实现,对使用Java的初学者能够明白其中的算法。 PS:博主的技术水平有限,可能代码会比较的臃肿冗余,在时间复杂度和空间复杂度上无法做到最优,

weixin_44018540的博客 228

算法趣题 第一天

本篇简介 本篇博客的题目来源于《程序员的算法趣题》。 这是一本非常有意思的算法书,不像其他的算法书从链表,二叉树等数据结构原理入手,通过一道道的题目,从实际问题出发,来使读者了解算法的运用。不过唯一不足之处在于书中的算法源码多用Ruby与JavaScript来实现,对于刚上手学习编程的读者来说,这两种语言不会是首选的编程语言。因此,博主使用Java对书中的源码进行重构实现,对使用Java的初学者能够明白其中的算法。 PS:博主的技术水平有限,可能代码会比较的臃肿冗余,在时间复杂度和空间复杂度上无法做到最优,

weixin_44018540的博客 282
上一篇: 查找算法(一)
下一篇: 算法趣题(二)
reedzhan
博客等级 码龄10年 7粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值