题目如下:100个人手拉手围成一圈,逢三退一(1到3的循环数数,被数到3的人退出)求最后一个被剩下人的编号,请写出代码
解题思路:
把这100个人组成100个数组成员,数组成员的值为改人员的编号
再定义一个新的数组准备存放数数后的数据
然后用取余运算判断该数组成员数是不是能被3整除,如果该数组成员数能被整除则不作处理,否则加入到新的数组并存上编号
每次点数前判断一下有没有余数,如果有,则提前空出新数组存放余数成员数
最后一直循环前面的步骤,直到新数组成员数等于三则跳出循环输出新的数组成员数第三个成员,这就是我们要找的编号
实现代码如下:
- [hide]Import "zm.luae"
- Dim 编号(),新数组(),余数
- For i = 1 To 100
- 编号(i - 1) = i
- Next
- Do
- Delay 10
- Dim 序号 = 0
- zm.TableClear(新数组)
- 余数 = CInt(UBOUND(编号) + 1) Mod 3
- 序号 = 余数
- For i = 1 To UBOUND(编号) + 1 - 余数
- If CInt(i) Mod 3 = 0 Then
- //TracePrint i
- Else
- 新数组(序号) = 编号(i - 1)
- 序号 = 序号 + 1
- End If
- Next
- //TracePrint UBound(新数组)
- If 余数 = 1 Then
- 新数组(0) = 编号(UBOUND(编号))
- ElseIf 余数 = 2 Then
- 新数组(0) = 编号(UBOUND(编号) - 1)
- 新数组(1) = 编号(UBOUND(编号))
- End If
- 编号 = Clone(新数组)
- If UBOUND(新数组) = 3 Then
- TracePrint 新数组[2]
- Exit Do
- End If
- Loop[/hide]
复制代码