- 按键认证大神
- 2699998
- 3587
- 11
- 2173 朵
- 7386 个
- 1021 个
- 91120
- 2014-08-23
|
1#
t
T
发表于 2022-07-08 22:38
|
|只看楼主
题目描述 在前苏联的一些国家,有一种关于幸运票的信仰。如果票号左半部分的数字总和等于右半部分的数字总和,则任何种类的交通票都被认为是幸运的。以下是此类数字的示例:
003111 # 3 = 1 + 1 + 1 813372 # 8 + 1 + 3 = 3 + 7 + 2 17935 # 1 + 7 = 3 + 5 // 如果长度为单数则忽略掉中间的数字. 56328116 # 5 + 6 + 3 + 2 = 8 + 1 + 1 + 6
这些票要么在使用后被吃掉,要么被收集来炫耀。 您的任务是编写一个函数,如果参数是幸运票号的字符串十进制表示形式,或者所有其他数字luck_check(str) ,则返回True/False。它应该为空字符串或不代表十进制数的字符串返回 “invalid input”(原题是抛错,这边修改成了返回错误的提示)。
题目难度:简单 题目来源:Luck check | Codewars 题目交流: 584781753
|
- Import "SmAssert.dll"
- Function 幸运票(票号)
- // 您的代码写在这里
- End Function
- SmAssert 幸运票("683179") = True
- SmAssert 幸运票("683000") = False
- SmAssert 幸运票("") = "invalid input"
- SmAssert 幸运票("6F43E8") = "invalid input"
- SmAssert 幸运票("17935") = True
复制代码 参考题解- Import "SmAssert.dll"
- Function 幸运票(票号)
-
- '【作者】:神梦无痕
- '【QQ】:1042207232
- '【Q群】:584781753
- ' 判断非纯数字报错
- If IsNumeric(CStr(票号)) = False Then
- 幸运票 = "invalid input"
- Exit Function
- End If
-
- ' 将数字分为左右两组
- Dim Left_Begin, Left_End, Right_Begin, Right_End
- Left_Begin = 1
- Left_End = Len(票号) / 2
- Right_Begin = Left_End + 1
- Right_End = Len(票号)
-
- If Len(票号) Mod 2 = 1 Then
- ' 如果长度为单数则忽略掉中间的数字
- Left_End = (Len(票号) + 1) / 2 - 1
- Right_Begin = Left_End + 2
- End If
-
- ' 计算左半部分的数字总和
- Dim i, Left_Sum
- For i = Left_Begin To Left_End
- Left_Sum = Left_Sum + Int(Mid(票号, i, 1))
- Next
-
- ' 计算右半部分的数字总和
- Dim j, Right_Sum
- For j = Right_Begin To Right_End
- Right_Sum = Right_Sum + Int(Mid(票号, j, 1))
- Next
-
- 幸运票 = CBool(Left_Sum = Right_Sum)
- End Function
- SmAssert 幸运票("683179") = True
- SmAssert 幸运票("683000") = False
- SmAssert 幸运票("") = "invalid input"
- SmAssert 幸运票("6F43E8") = "invalid input"
- SmAssert 幸运票("17935") = True
复制代码 插件下载【插件】神梦断言插件 SmAssert.dll,帮助开发者发现业务逻辑错误
|