【小学数学】五年级上册倍数与因数经典题目

这篇博客介绍了一道针对五年级学生的数论难题,涉及2、3的公倍数和有序枚举概念。通过排序、筛选和判断偶数位置,找到最小的三位偶数解。虽然看似简单,但对学生来说难度颇高,适合课外辅导。程序实现了这一解题过程,演示了如何巧妙处理问题。

前言:五年级上册的数论是五年级学生的一大痛点,也是课外培训机构特别爱辅导的知识点之一。

这次带来的是一道需要用到倍数特征和枚举法的题。

别觉得简单,如果把小学题目难度分为10级,这道题对学生来说没9级也有8级了。

(其实小学阶段压根就没几个人学得会“有序枚举”)

"""
Author:Sprite
Date:2022/4/16 11:14
Have a nice day ~~~
"""

# 从给定的任意4个数字中选3个组成的2、3的公倍数中,最小的是多少?
# 注意:由于学生不可能使用枚举法(即找出所有6的倍数)做这个题,所以这里代码也尽量按照学生思路去写

# 录入题目
a = int(input('请输入第一个数字:'))
b = int(input('请输入第二个数字:'))
c = int(input('请输入第三个数字:'))
d = int(input('请输入第四个数字:'))

# Step1::从小到大排序
a, b, c, d = sorted([a, b, c, d])
print('①按照从小到大排序为:', end='')
print(a, b, c, d, sep=',')

# Step2:先根据3的倍数这个条件选出3个数字和是3的倍数的数字
# 注意:小学生是不可能会直接4选3的枚举的,所以要把4选3巧妙地等效为4选1,这里得讲清楚点
#      这样学生就能很容易回答出一共只有4种情况

print('②满足数字和是3的倍数的组合有:', end='')

# 在循环之前先创建一个列表用来存第三步的偶数
list_2 = []

for x in [a, b, c, d]:
    list_1 = [a, b, c, d]
    list_1.remove(x)
    if sum(list_1) % 3 == 0:
        a1, b1, c1 = list_1
        print(list_1, end=' ')

        # Step3:接着根据2的倍数这个条件判断出每组数字所能组合出的最小偶数
        # 具体做法是将3个数字里面的偶数放到个位,如果有多个偶数,就把大的放个位
        # 满足要求的先全部丢进list_2中
        
        # 先讨论3个数字中没有0的情况,因为0不能放首位,要麻烦一些
        if a1 != 0 and b1 != 0 and c1 != 0:
            if a1 % 2 == 0 and b1 % 2 == 0 and c1 % 2 == 0:
                list_2.append(a1 * 100 + b1 * 10 + c1)
            elif a1 % 2 == 0 and b1 % 2 == 0:
                list_2.append(a1 * 100 + c1 * 10 + b1)
            elif a1 % 2 == 0 and c1 % 2 == 0:
                list_2.append(a1 * 100 + b1 * 10 + c1)
            elif b1 % 2 == 0 and c1 % 2 == 0:
                list_2.append(a1 * 100 + b1 * 10 + c1)
            elif a1 % 2 == 0:
                list_2.append(b1 * 100 + c1 * 10 + a1)
            elif b1 % 2 == 0:
                list_2.append(a1 * 100 + c1 * 10 + b1)
            elif c1 % 2 == 0:
                list_2.append(a1 * 100 + b1 * 10 + c1)

        # 再讨论3个数字中有0的情况,全是0不讨论。
        # 由于0是最小的数字,而前面用了sorted函数,所以0必然出现在前面
        elif a1 == 0 and b1 == 0 and c1 != 0:
            list_2.append(c1 * 100)
        elif a1 == 0 and b1 != 0 and c1 != 0:
            if b1 % 2 == 0 and c1 % 2 == 0:
                list_2.append(b1 * 100 + c1)
            elif b1 % 2 == 0 and c1 % 2 != 0:
                list_2.append(c1 * 100 + b1)
            elif b1 % 2 != 0 and c1 % 2 == 0:
                list_2.append(b1 * 100 + c1)
            elif b1 % 2 != 0 and c1 % 2 != 0:
                list_2.append(b1 * 100 + c1 * 10)

# Step4:接着再比较刚放进list_2的最小的三位偶数,决出最终赢家!
print()
print('③每组中最小的三位偶数分别是:', list_2, sep='')
print('④最终最小的三位偶数是:', min(list_2), sep='')

最后好消息就是这道题最多考填空题,也就值一两分吧。。。

下次想弄个分段计费问题,这才是真正的重中之重,四五六年级压轴题常客了

程序运行展示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sprite.Nym

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值