excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel VBA 这个小学三年级数学题看你会不会做?

本文于2023年7月5日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!

☆本期内容概要☆

  • VBA 解小学三年级数学题

大家好,我是冷水泡茶,昨天晚上辅导三年级小朋友数学,有这样一道题:

我抓耳挠腮地看了半天,愣是没搞明白,只好承认自己不会,“这道题有点复杂,爸爸暂时也想不出解法,让我再考虑考虑......"

今天早上出门前,灵光一闪,是不是可以用VBA来解决?我一个一个数字试,总能把它解出来吧?于是拿出手机把题目拍下来,准备到单位再尝试一下。

于是,我根据题目的已知条件,写了一段代码,总算把ABCDEF给求出来了:

Sub ABCDEF()    Dim A%, B%, C%, D%, E%, F%    Dim selectedNumber As String    Dim r1$, r2$, r3$    For A = 1 To 9        For B = 1 To 9            If A <> B Then                r1 = CStr(A * 11 * B * 11)                If Len(r1) = 4 Then                    If Left(r1, 1) = Right(r1, 1) Then                        C = Left(r1, 1)                        If C <> A And C <> B Then                            If Mid(r1, 2, 1) = A And _                                Mid(r1, 3, 1) = A Then                                selectedNumber = A & "|" & B & "|" & C                                Debug.Print selectedNumber                                r2 = CStr(B * 11 * B * 11)                                If Left(r2, 1) = A And _                                    Mid(r2, 2, 1) = A Then                                    F = Right(r2, 1)                                    If F = Mid(r2, 3, 1) And _                                       F <> A And F <> B And F <> C Then                                        selectedNumber = A & "|" & B & "|" & C & "|" & F                                        Debug.Print selectedNumber                                        For D = 1 To 9                                            If InStr(selectedNumber, D) = 0 Then                                                For E = 1 To 9                                                    If InStr(selectedNumber, E) = 0 Then                                                        r3 = CStr(D * 11 * E * 11)                                                        If Left(r3, 1) = D And Right(r3, 1) = D _                                                            And Mid(r3, 2, 1) = F And Mid(r3, 3, 1) = F Then                                                            selectedNumber = A & _                                                              "|" & B & "|" & C & "|" & D & "|" & E & "|" & F                                                            Debug.Print selectedNumber                                                            Cells(2, 1) = A: Cells(2, 2) = B: Cells(2, 3) = C                                                            Cells(2, 4) = D: Cells(2, 5) = E: Cells(2, 6) = F                                                        End If                                                    End If                                                Next                                            End If                                        Next                                    End If                                End If                            End If                        End If                    End If                End If            End If        Next    NextEnd Sub

上面的代码块看上去不完整,我们再上一张图:

代码解析:

1、通过两层循环,模拟乘数和被乘数

2、对乘积进行考察,判断其各位数字的模式:

(1)长度为4位

(2)首尾相同、中间两位相同、一二位相同、三四位相同

(3)包含乘数或被乘数中的数字

3、把符合条件的数字存到字符串变量selectedNumber里,在后续判断里作为排除项(因为各个字母代表不同的数字)

4、最后得出结果,写入单元格,这里结果只有一条,所有写入单元格的方法就简单处理,没考虑多条符合条件的结果。

结果是解出来了,但三年级小朋友也不可能象我这样写个代码吧?(也许有,但就他们这个阶段的大多数人来说,肯定是用他们自己的思维方式与解题思路。)

通过观察代码解题结果,我们发现,ABCDEF代表6个不同的数字,1~9的数字中,1~3没有出现在答案中,那么,解题思路可能就是要采用排除法。

1、我们发现,积都是4位数。如果两个两位数比较小的话,它的积可能是3位数。

2、我们就从1开始排除,如果能排除掉3个数,根据题意,那么余下的6个数字那就分别对应ABCDEF,而题目并没有要求分别求出每个字母代表的数字,只是要求它们的和,那么把这6个数相加就得出答案。

3、下面我们就试着用排除法来解,做一回小学生:

(一式):AA*BB=CAAC

(二式):DD*EE=DFFD

(三式):BB*BB=AAFF

求:A+B+C+D+E+F

(1)如果A=1,则令B=2~9,而11*88=968,只有3位数,所以2~8排除,11*99=1089,不符合CAAC的数字规则。所以,A<>1,同理,B、D、E均<>1

再看C,如果C=1,那么2~9中,不同的数字相乘,结尾等于1的只有33*77,但它的首位不等于1,所以C<>1

再看F,根据三式,如果F=1,那么,B只能是9,则99*99=9801,也不符合数字规则,所以F<>1结论:所有字母均不等于1

(2)如果A=2,则令B=3~9,这里有点麻烦了,我不知道有什么规律(也许有,但我不知道),那就一个个地去乘吧:22*33~99,如下表

可见,没有符合CAAC或DFFD的模式的数字,根据一式和二式,可以断定ABDE都<>2

再看C,如果C=2,那么A*B的尾数为2,则3~9中,不同的数字相乘尾数是2的有:33*44,44*88,66*77,88*99,这些数字乘积首位数字没有等于2的,所以C<>2

再看F,如果F=2,根据三式,那么3~9中,各个数字与自身相乘,尾数没有等于2的,所以F<>2结论:所有字母均不等于2

(3)如果A=3,则令B=4~9,参照(2)的方法:33*44~99

可见,没有符合CAAC或DFFD的模式的数字,所以ABDE都<>3

再看C,如果C=3,那么A*B的尾数为3,则4~9中,不同的数字相乘尾数是3的只有77*99,乘积首位数字不等于3,所以C<>3

再看F,如果F=3,根据三式,那么4~9中,各个数字与自身相乘,尾数没有等于3的,所以F<>3结论:所有字母均不等于3

总结论:1~9的数字中,剔除了1~3,那么,根据题意,ABCDEF这6个字母应该分别对应着4~9这6个数字中的某个数字,所以A+B+C+D+E+F的和计算如下:

4+5+6+7+8+9=39

至此,似乎问题已经解决,但还是有点意犹未尽,试想我们可不可以进一步求得每个字母的值?接下来:

(4)如果A=4,则令B=5~9,参照(2)的方法:44*55~99

可见,没有符合CAAC或DFFD的模式的数字,所以ABDE都<>4

再看C,如果C=4,那么A*B的尾数为4,则5~9中,不同的数字相乘尾数是4的有:66*99,乘积首位数字不等于4,所以C<>4

所以,F=4,根据三式,5~9中,与自身相乘,尾数等于4的,只有8,所以B=8;因88*88=7744,根据三式可知A=7;因77*88=6776,根据一式可知C=6

至此,尚有D、E对应5或者9,若D=5,则E=9,根据二式55*99=5445,符合条件;若D=9,则E=5,根据二式99*55=5445,不符合条件,因此D=5,E=9

终极结论:A=7,B=8,C=6,D=5,E=9,F=4,它们的和是39。

上面的解题过程可能也不适合小朋友,计算量太大。而且是知道答案以后,才去倒推解题过程,感觉不是那么严谨。如果哪位朋友有好的解法,欢迎在评论区留言,谢谢!

好,今天就到这吧。欢迎点赞、留言、分享,谢谢大家,我们下期再会。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接