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

相关推荐
大脑经常闹风暴@小猿1 小时前
1.1 go环境搭建及基本使用
开发语言·后端·golang
尚学教辅学习资料1 小时前
基于SpringBoot的美食分享平台+LW示例参考
spring boot·后端·美食
Vitalia3 小时前
从零开始学 Rust:基本概念——变量、数据类型、函数、控制流
开发语言·后端·rust
猎人everest6 小时前
SpringBoot应用开发入门
java·spring boot·后端
孤雪心殇12 小时前
简单易懂,解析Go语言中的Map
开发语言·数据结构·后端·golang·go
小突突突13 小时前
模拟实现Java中的计时器
java·开发语言·后端·java-ee
web1376560764313 小时前
Scala的宝藏库:探索常用的第三方库及其应用
开发语言·后端·scala
闲猫14 小时前
go 反射 interface{} 判断类型 获取值 设置值 指针才可以设置值
开发语言·后端·golang·反射
LUCIAZZZ14 小时前
EasyExcel快速入门
java·数据库·后端·mysql·spring·spring cloud·easyexcel
Asthenia041215 小时前
依托IOC容器提供的Bean生命周期,我们能在Bean中做些什么?又能测些什么?
后端