本帖最后由 数论 于 2023-2-7 22:21 编辑
快乐数(Happy Number)品味 数论-2023/2/7
前 言 前段时间有幸在麻辣君老师的群里获得户籍卡三老师出的一道题目
快乐数题目.zip
(9.32 KB, 下载次数: 10)
,经由tchh666老师转发,发现题目不错,解答过程颇具快乐。在此,衷心地感谢以上三位老师。 正 文 经思考,将本人品题过程书写如下: 在表格中进行简单测试后发现S(a)中非1循环序列中89是最先出现次数最多的值,占比约42%左右。故有以下函数、VBA方法判断是否快乐数,供大家参考。 365函数(tchh666老师提供): - =IF(REDUCE(,A2:Z2,LAMBDA(X,Y,SUM(MID(X,SEQUENCE(LEN(X)),1)^2)))=1,"是","否")
复制代码思路:A2:Z2为26个单元格,当REDECE的1参省略时,A2作为二参的第一个参数, 成为第一个X, 剩下的25个单元格,因为在函数体运算中没有Y的出现, 所以仅作为循环次数,不进入计算。一共循环26次,而每一次循环后的结果,则为新的X,依次循环 第一个X为430的时候,SUM(MID(430,SEQUENCE(LEN(430)),1)^2) —> SUM(MID(430,{1;2;3},1)^2) —> SUM({4;3;0}^2) —> 25,第一次循环的结算结果为25。 25作为新的X值继续循环,SUM(MID(25,SEQUENCE(LEN(25)),1)^2) —> SUM(MID(25,{1;2},1)^2) —> SUM({2;5}^2) —> 29 29再次作为新的X值继续循环.... 26次循环完毕以后, REDUCE的结果是一个单值, 此时判断该值是否=1,即可。 VBA(准提部林老师提供): - Function TestNum(X)
- Do
- For i = 1 To Len(X)
- S = S + Mid(X, i, 1) ^ 2 ’计算平方和
- Next i
- If S = 1 Or S = 89 Then Exit Do ’满足即退出循环
- X = S: S = 0
- Loop
- TestNum = IIf(S = 1, "是", "否")
- End Function
复制代码
|