Welcome to Rolland Town which Record fire's life.
« »
2004年02月16日03年9月-06年9月存档

127 views

小游戏,呵呵

  刚才调试完最后的程序,休息的时候,一个朋友问了我一个问题——有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的地方不准确,我同意他说的上面这段话,但是他还说这个题目没有解,我就不赞同了,待续……….

版权声明 »

可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
本文url:http://netfire.name/archives/20040216/95.html

日志信息 »

该日志于2004-02-16 07:27由 NetFire 发表在03年9月-06年9月存档分类下, 评论已关闭。

AdSense »

没有评论

抱歉,评论被关闭

返回顶部