爱因斯坦阶梯数学问题(含有多次改进方法)

每天一练——爱因斯坦出了一道这样的数学题 探索爱因斯坦的数学题 阅读详情

一、问题背景

爱因斯坦曾经出过这样一个数学题,讲的是有一个很长的阶梯,如果每步上跨2 阶,最后只剩 1 阶;每步跨 3 阶,最后剩 2 阶;每步跨5 阶,最后剩 4 阶;每步跨 6 阶,最后剩 5 阶;当每步跨 7 阶时,刚好可以一阶不剩。

二、问题分析

这样的一个长阶梯如果整除2会余1,整除3会余2.……以此内推,这个阶梯数刚好是7的倍数而且要满足前面的所有条件,所以需要循环进行判断某个阶梯数是否满足。

三、算法代码

steps = 7
i = 1
flag = False

while i < 1000:
    if  (steps % 2 == 1) and (steps % 3 == 2) and (steps % 5 ==4) and (steps % 6 == 5) and (steps % 7 ==0):
        flag = True
        break
    else:
        steps = steps +1
    i = i + 1

if flag == True:
    print('阶梯数是:', steps)
else:
    print('规定范围内找不到答案!')

四、运行结果

在这里插入图片描述

五、代码分析

flag = False

这里设置一个flag用于判断是否找到了正确的阶梯数,如果找到了正确答案,flag会被赋值True并跳出循环,然后输出结果。
根据题意可以知道,阶梯数最少有7,所以steps从7开始,并且循环+1,直到找到满足条件的steps。
循环的限制范围要设置的适当,否则会出现在范围内找不到答案的情况。

六、改进一

1.改进分析

因为问题的答案一定是7的倍数,所以可以把答案的范围缩小在7的倍数,并且满足所有条件的数。
所以在判断条件中我们可以去掉steps%7==0这一条,并在steps的循环中,让steps每次多加7,这样得到的答案是相同的,但是计算量更小。

2.改进后代码

steps = 7
i = 1
flag = False

while i < 1000:
    if (steps % 2 == 1) and (steps % 3 == 2) and (steps % 5 == 4) and (steps % 6 == 5):
        flag = True
        break
    else:
        steps = 7 * (i + 1)
    i = i + 1

if flag == True:
    print('阶梯数是:', steps)
else:
    print('规定范围内找不到答案!')

3.运行结果

在这里插入图片描述

七、改进二

1.改进分析

当循环限制的范围较大时,正确的答案肯定不止一个,如果要找到正确的答案并且全部输出,就不能再找到第一个答案之后跳出循环,并且在循环时就要输出答案。

2.改进后代码

steps = 7
i = 1

while i < 1000:
    if  (steps % 2 == 1) and (steps % 3 == 2) and (steps % 5 == 4) and (steps % 6 == 5):
         print('阶梯数是:', steps)
         steps = 7 *(i + 1)
        
    else:
        steps = 7 *(i + 1)
    i = i + 1

3.运行结果

在这里插入图片描述
emmm这个答案明显不太符合现实,阶梯数太多的话,像我这种懒狗直接选择坐电梯。
所以我们需要适当的缩小循环的限制范围。

while i < 100:

将这里改为i<100即可,再来看看改之后的运行结果。
在这里插入图片描述

八、改进三

这个方法是我别人的博客中发现的,让我眼前一亮,学到了新思路。
原博客:https://blog.youkuaiyun.com/qq_43751336/article/details/109623910

1.改进分析

这个方法呢是在写代码之前就要多动脑。
回顾之前的部分条件:如果每步上跨2 阶,最后只剩 1 阶;每步跨 3 阶,最后剩 2 阶;每步跨5 阶,最后剩 4 阶;每步跨 6 阶,最后剩 5 阶。
那么如果多一阶台阶,跨2,3,5,6步都能刚好跨完,而2,3,5,6的最小公倍数是30,30-1=29,那么最小满足以上条件的数是29,所以这个满足条件的阶梯数必须是30的倍数减1。

2.改进后代码

steps = 30-1

while steps < 1000:
    if (steps % 7 == 0):
        print('阶梯数是:', steps)
    steps = steps + 30

3.运行结果

在这里插入图片描述

九、总结

在这个数学问题中,能得到答案的算法不止一种,只要多思考,就能用更少的代码得到相同的答案,这也是Python的特点之一。我认为一个算法题不是能运行出答案就完事了,应该去尝试不断的改进,不断的找到更快捷的方法,我相信这样对于像我这种初学Python的小白会有很大的提升。

Python趣味算法:爱因斯坦的数学题:用Python解决经典阶梯问题 摘要:本文探讨了爱因斯坦提出的经典阶梯数学问题,通过编程实现了两种解法。问题要求找出满足特定余数条件的阶梯数x:x%2=1,x%3=2,x%5=4,x%6=5,x%7=0。分析发现x+1是2、3、5、6的公倍数,推导出x=30k-1且能被7整除。程序实现了暴力搜索和优化算法(时间复杂度从O(n)降至O(n/30)),验证了解的通项公式x=210m+119。该案例展示了数学建模、算法优化和编程技巧的完美结合,具有重要教学价值。(149字) 阅读详情

相关推荐

Java实现:爱因斯坦的阶梯问题

Java实现:爱因斯坦的阶梯问题;爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。请问该阶梯至少有多少阶。编写一个Java程序解决该问题。穷举法。

寒水馨 · 轻量级技术文档 · hanshuixin.org 1361

阶梯问题

题目: 小明假期去爬山,要爬上山,小明需要爬上很多人造的石梯。爬山过程中,爱思考的小明开始思考了,“我自己每次能上一阶、两阶或三阶,以前的人统计了共有N级阶梯,那么我有多少中方式到达山顶呢?” 题目分析: 假设N=1,那么很明显只有一种方式;当N=2,有2种方式,每次上一阶或一次上两阶;当N=3,有4种方式,每次上一阶或先上一阶梯再一次上两阶或一次上三阶; 当N=4时,有7

lx1848的专栏 3318

爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨2阶,最后剩下1阶;若每步跨3阶,最后剩下2阶;若每步跨5阶,最后剩下4阶。若每步跨6阶,则最后剩下5阶。只有每步跨7阶,才刚好跨完。

爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨2阶,最后剩下1阶;若每步跨3阶,最后剩下2阶;若每步跨5阶,最后剩下4阶。若每步跨6阶,则最后剩下5阶。只有每步跨7阶,才刚好跨完。

qq_44167426的博客 2837

爱因斯坦阶梯问题及寻找完全数问题

问题一:爱因斯坦阶梯问题 爱因斯坦阶梯问题:有一长阶梯,若每步上2阶,则最后剩1阶,若每步上3阶,最后剩两阶; 若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶不剩 问题:一共有多上阶? 方法一:(最简单的方式) 代码如下: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; /* run this program ...

k_ys的博客 4177

C语言实现:爱因斯坦的阶梯问题

C语言实现:爱因斯坦的阶梯问题;爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。请问该阶梯至少有多少阶。编写一个C程序解决该问题。穷举法

寒水馨 · 轻量级技术文档 · hanshuixin.org 3644

Xilinx System Generator多速率系统(Multi-Rate Systems)的使用

在本实验练习中,您将学习在System Generator中如何使用多个时钟域有效地实现具有多个数据速率的设计。

白码王子小张的博客 1092

C语言:爱因斯坦的数学题

问题: 爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩1阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问在 1~N 内,有多少个数能满足? 问题分析 用变量x表示阶梯数,则x 应满足: 若每步跨2阶,则最后剩1阶 -- x%2=1; 若每步跨3阶,则最后剩2阶 -- x%3=2; 若每步...

Yummy的博客 8938

Ubuntu22.04下3分钟搞定GitHub加速:SwitchHosts+小鱼工具保姆级配置指南

本文提供Ubuntu22.04下快速解决GitHub下载超时问题的保姆级教程,通过SwitchHosts图形化工具和小鱼一键换源工具实现高效加速。详细步骤包括环境准备、工具安装配置及验证方法,帮助开发者轻松优化GitHub访问速度,提升工作效率。

weixin_29258297的博客 562

030爱因斯坦阶梯问题

030爱因斯坦阶梯问题1.题目2.代码3.个人见解4.输出结果截图 1.题目 著名的爱因斯坦阶梯问题:有一条长长的阶梯。 如果你每步跨2阶,那么最后剩1阶; 如果你每步跨3阶,那么最后剩2阶; 如果你每步跨5阶,那么最后剩4阶; 如果你每步跨6阶,那么最后剩5阶; 只有当你每步跨7阶时,最后才正好走完,一阶也不剩。 请问该阶梯至少有多少阶?(求所有三位阶梯数) 2.代码 #include<s...

mosi357的博客 665

Unity游戏开发实战:用柏林噪声打造3D随机地形(附完整C#代码)

本文详细介绍了如何在Unity游戏开发中使用柏林噪声算法生成3D随机地形,包含完整的C#代码实现。从基础柏林噪声原理到高级参数控制,再到性能优化和常见问题解决,帮助开发者掌握程序化地形生成技术,打造丰富多变的游戏世界。

weixin_29281941的博客 98

使用libx265对YUV进行h265编码

使用libx265对YUV进行h265编码

Embedded engineer 3075

python:爱因斯坦阶梯问题

爱因斯坦阶梯问题 解释:设有台阶若干,每跨2阶,最后余1阶,跨3阶余2阶,跨5阶余4阶,跨6阶余5阶,跨7阶正好到达阶梯顶部。用编程求最小结果

三岁学编程的博客 1万+

Windows Server远程桌面断开后,PyWinAuto/按键精灵脚本失效?试试这个‘会话保持’的终极配置

本文深入解析Windows Server远程桌面断开后导致PyWinAuto/按键精灵脚本失效的问题,提供会话保持的终极配置方案。通过转换到控制台会话(console模式)和调整组策略,确保自动化程序在断开连接后持续稳定运行,适用于Windows Server各版本。

weixin_28738165的博客 227

python编程爱因斯坦的问题_教你如何用编程解决爱因斯坦的数学问题

曾经爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩1阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问在 1~N 内,有多少个数能满足?针对于这个爱因斯坦的数学问题,那么我们用编程知识来如何解决它?下面酷叮猫来给您分析一下:首先来问题分析,假设用变量x表示阶梯数,则x 应满足:若每步跨2阶,则最后剩1阶...

weixin_39717704的博客 1803

vscode中运行gcc -v命令失败了,提示:gcc不是内部或外部命令...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 974

手把手教你学Simulink--基于飞行控制与稳定性的场景实例:固定翼无人机的自动起飞与降落控制

本文介绍了使用Simulink对固定翼无人机自动起飞与降落控制系统进行建模与仿真的完整流程。首先构建了包含飞行器动力学模型、控制系统、环境模拟等模块的系统结构,详细阐述了简化动力学方程的推导和实现。重点讲解了PID控制器设计,包括起飞阶段的速度控制和降落阶段的高度控制策略。通过添加环境干扰和输入信号,建立了完整的仿真模型,并利用输出显示模块评估系统性能。该实例为无人机自主控制系统的开发提供了有效的仿真验证方法,有助于优化参数提高飞行稳定性。

MHD0815的博客 4308

C语言 爱因斯坦阶梯问题

著名的爱因斯坦阶梯问题是这样的:有一条长长长的阶梯,,如果你每步跨2阶,那么最后剩1阶;如果你每步跨3阶,那么最后剩2阶;如果你每步跨5阶,那么最后剩4阶;如果你每步跨6阶,那么最后剩5阶;最有当你每步跨7阶时,最后正好走完,一阶也不剩。请问这条阶梯最少有多少阶。

Keep Fighting All The Time 2万+

海德汉机床采集数据

海德汉数控系统我一般在高端机床上见得比较多。有好多五轴加工精度比较高的机床都用的是海德汉的系统。市面上常见的有530和640等型号。海德汉的采集还是有点难度的,需要对SDK有深度的了解。

若云流风的专栏 1524

爱因斯坦阶梯问题

爱因斯坦曾经提出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩下1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩下4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。请问该阶梯至少有多少阶。  我们假设阶梯共有n阶,我们可以很快的列出下面的式子:n mod 2 = 1n mod 3 = 2n mod 5 = 4n mod 6 = 5n mod 7 = 0用“强”解:

qq_27771975的博客 1579

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

算法-经典趣题-爱因斯坦阶梯问题

本文为joshua317原创文章,转载请注明:转载自joshua317博客算法-经典趣题-爱因斯坦阶梯问题 - joshua317的博客 一、问题 爱因斯坦曾经提出过这样一道有趣的数学题: 有一个长阶梯, 若每步上2阶,最后剩下1阶; 若每步上3阶,最后剩2阶; 若每步上5阶,最后剩下4阶; 若每步上6阶,最后剩5阶; 只有每步上7阶,最后刚好一阶也不剩。 请问该阶梯至少有多少阶。 二、分析 来分析一下爱因斯坦的阶梯问题。假设阶梯的个数为minNumber,按照前述的条件,minNu.

joshua317的博客 2529

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python数学问题22:爱因斯坦的数学题

1. 问题描述 2. 问题分析 3. 实例代码 4.

简时刻的博客 3596

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

爱因斯坦阶梯问题---Python实现

例子:一次,爱因斯坦给他的朋友出了这样一道数学题:一条长长的阶梯,如果每步跨2阶,最后剩1阶;每步跨3阶,最后剩2阶;每步跨5阶,最后剩4阶;每步跨6阶,最后剩5阶. 只有每步跨7阶时,才正好到头,一阶也不剩.请问,阶梯到底有多少阶? #!/usr/bin/env python -- coding: utf-8 -- x = 7 i = 1 flag = 0 while i <=100: i...

数字成都 4938

Python爱因斯坦阶梯问题

爱因斯坦阶梯问题 ·爱因斯坦阶梯问题: 设有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;只有每步跨7阶时,正好到阶梯顶。 问最少有多少步阶梯? 要求使用while 循环语句 分析 设1000内能输入出最小步阶梯数, 因每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;只有每步跨7阶时,正好到...

weixin_45688123的博客 7372

【c语言趣味编程100例】爱因斯坦数学题

问题:爱因斯坦出了一个数学题:有一个长阶梯 若每步跨2阶 则最后剩余一阶 若每步跨3阶 最后剩余2阶 若每跨5阶 最后剩下4阶 若每步跨6阶 最后剩余5阶 只有每次跨7阶 最后才正好一阶不剩。请问在1-N内 有多少个数能满足 编程思路:解决该类问题,我们可以用穷举法进行求解,通过一个while循环 可以作为非法字符的判断 ...

芝兰生于深谷,不以无人而不芳 7187

python爱因斯坦阶梯编程_Python---基础---爱因斯坦阶梯问题

写一个程序,打印出0-100所有奇数ls = range(0, 101)for i in ls:if i % 2 == 1:print(i)--------------------------------爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,走每步上2阶,最后剩余1阶;如果每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶,只有每步上7阶,最后刚好一阶不剩。-编...

weixin_39942397的博客 2567
上一篇: 舍罕王的失算(象棋棋盘摆麦子问题)
王奇秀
博客等级 码龄7年 9粉丝 4原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值