小游戏,呵呵
刚才调试完最后的程序,休息的时候,一个朋友问了我一个问题——有AB两个盒子。一个球。开始计时,球在A盒中。N/2秒后,把球从A盒中拿出来放到B盒中。N/2+N/4秒后,再把球放回A盒。N/2+N/4+N/8秒后,把球放到B盒。N秒时,球在哪个盒子里?
其实这种题网上很多,但是自己从来没做过,而且刚好休息,也就顺便做着玩儿,我想了想,就用ASP.NET(VB.NET)给他做了一个,12行代码,感觉还不错。下面就是我的代码——
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer = 0
Dim n As Integer = TextBox1.Text
Dim s As Double = 0
Do While s = n
s = s + n / 2
i = i + 1
Loop
If (i Mod 2) = 0 Then
Label1.Text = “球在B盒中”
Else
Label1.Text = “球在A盒中”
End If
End Sub
想通了其实很简单,2/n,n/2+n/4,n/2+n/4+n/8……。这实际上是一个极限等于1的等差数列,只需要计算出等于1的时候经历了多少次循环,然后判断这个循环的次数是奇数还是偶数就可以了。
有更好解的朋友贴出你的代码来看看,呵呵
补记:
莲花说道——s=1/2+ 1 / 4+…..
有穷多次后,s比较接近于1 ,这时候由于双精度数已经无法表述出1和s之间的差,所以 1==s返回true,循环结束 。
也就是说我这个程序在s=n的地方不准确,我同意他说的上面这段话,但是他还说这个题目没有解,我就不赞同了,待续……….
没有评论