【趣学Python算法100例】爱因斯坦的数学题

问题描述

爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩一阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶,则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问在1到n内,有多少个数能满足?

问题分析

根据题意,用变量x表示阶梯数,则阶梯数x应该同时满足以下条件:

  • 若每步跨2阶,则最后剩1阶,即x%2=1
  • 若每步跨3阶,则最后剩2阶,即x%3=2
  • 若每步跨5阶,则最后剩4阶,即x%5=4
  • 若每步跨6阶,则最后剩5阶,即x%6=5
  • 若每步跨7阶,最后才正好一阶不剩,即x%7=0

算法设计

该问题要求输入n值,求解出在1-n的范围内存在多少个满足要求的阶梯数。在算法设计中,我们使用while循环,将循环条件设置为True,以允许重复读入多个n值。

对每一次读入的n值,都要判断在1-n的范围内存在的满足要求的阶梯数的个数。判断时可采用for循环,循环变量设为i,由题意:

阶梯数需要满足以下条件:

  1. 能被7整除。
  2. 除以6余5。
  3. 除以5余4。
  4. 除以3余2。

由于这些条件的限制,我们从7开始检查,因为7是满足第一个条件的最小整数。

循环条件为i<n;循环体中则使用问题分析中列出的5个条件来检验每一个i值,能够满足所有5个条件的i值即为所求的阶梯数。

确定程序框架

由上述分析可知,该程序的主体是一个循环结构。

  1. 输入n值。
python 复制代码
while True:
    n = int(input("请输入n值:"))
  1. 找到满足要求的阶梯数。
python 复制代码
for i in range(7, n+1):
    # 判断条件

使用for循环检查每一个i值是否满足判断条件。

程序流程图如下图所示:

完整程序

据上面的分析,编写程序如下:

python 复制代码
def computing_ladder(n):
    # 输入验证
    if not isinstance(n, int) or n < 1:
        raise ValueError("n must be a positive integer")

    print(f"在1-{n}之间的阶梯数为:")
    count = 0
    for i in range(7, n+1):
        # 阶梯数所满足的条件
        if (i % 7 == 0) and (i % 6 == 5) and (i % 5 == 4) and (i % 3 == 2):
            count += 1                              # count记录1~n之间满足条件的阶梯个数
            print(f"{i}")
    print(f"在1-{n}之间,有{count}个数可以满足爱因斯坦对阶梯的要求。")

if __name__=="__main__":
    while True:
        n = int(input("请输入n值:"))
        computing_ladder(n)

运行结果

在vscode下运行程序,结果如下图所示。由输出结果可知,在1~200之间满足条件的阶梯数只有1个,为119;在1~400之间满足条件的阶梯数有2个,为119和329;在1~600之间满足条件的阶梯数有3个,为119、329和539。

相关推荐
Pitayafruit9 分钟前
Spring AI 进阶之路05:集成 MCP 协议实现工具调用
spring boot·后端·llm
ss27334 分钟前
线程池:任务队列、工作线程与生命周期管理
java·后端
不像程序员的程序媛38 分钟前
Spring的cacheEvict
java·后端·spring
踏浪无痕1 小时前
JobFlow 实战:无锁调度是怎么做到的
后端·面试·架构
shoubepatien1 小时前
JAVA -- 11
java·后端·intellij-idea
喵个咪1 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:kratos-bootstrap 入门教程(类比 Spring Boot)
后端·微服务·go
uzong1 小时前
从大厂毕业后,到小公司当管理,十年互联网老兵的思维习惯阶段复盘
后端
追逐时光者2 小时前
一个 WPF 开源、免费的 SVG 图像查看控件
后端·.net
谷哥的小弟2 小时前
Spring Framework源码解析——PropertiesLoaderUtils
java·后端·spring·框架·源码
JIngJaneIL2 小时前
基于java+ vue助农电商系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端