【趣学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。

相关推荐
东风破_3 小时前
danci 2:创建的单词书到底存在哪里?从 Supabase 一路理解 ORM、Drizzle 和 RLS
数据库·后端·node.js
东风破_4 小时前
danci 项目(三):从 JSON 数据到 AI Coding,真实项目里的数据清洗、Prompt 和工程规范
前端·后端·node.js
东风破_4 小时前
danci 项目(一):从需求到架构,一个单词学习系统为什么会这样设计
前端·后端·node.js
jay神6 小时前
【计算机毕业设计】基于SpringBoot的程序教学辅助系统
java·前端·vue.js·spring boot·后端·毕业设计·课程设计
2601_962073819 小时前
Spring全面详解(基础版)
java·后端·spring
IT_陈寒9 小时前
Vite打包时的静态资源坑,我帮你踩过了
前端·人工智能·后端
考虑考虑9 小时前
kubectl命令
运维·后端·自动化运维
第五页的你9 小时前
ElasticSearch结合本地消息表实现搜索功能
后端
谢亮_vipxieliang10 小时前
ValidX分组验证详解:不同场景使用不同验证规则
java·spring boot·后端·spring cloud·eclipse·hibernate
超兔一体云10 小时前
MySQL索引优化实战——从慢查询到索引调优
后端·mysql