火柴游戏:有n根火柴,第1次取1根,第2次取2根,第i次取i根,当剩余火柴数为0时,不用添加火柴(即k=0),游戏结束。如果剩余火柴数不为0,但不够下一次取,此时添加k(k≥1)根火柴,在剩余火柴中再从1根开始取,直到能取完为止,求k的最小值。
例如:n=3时,第1次取1根,第2次取2根,此时正好取完,无须添加火柴,k=0;
例如:n=8时,第1次取1根,第2次取2根,第3次取3根,第4次要取4根,但剩余2根不够取。则加上1根,剩余3根,再从1根开始取,即第4次取1根,第5次取2根,剩余火柴为0,游戏结束,得k=1。
又如:n=4时,第1次取1根,第2次取2根,第3次不够取,若加上1根,剩余2根,再从1根开始取,第3次取1根,剩余1根不够第4次取,再加1根,又是剩余2根,显然加1根永远不可能取完。所以改用每次加2根,第1次取1根,第2次取2根,第3次不够取,添加2根,第3次取1根,第4次取2根,恰好能取完,得k=2。
编写一个VB程序可实现上述功能:在文本框Text1中输入火柴数量,单击“计算”按钮,在文本框Text2中显示最少添加数量,程序运行界面如下图所示:
实现上述功能的程序代码如下: Private Sub ok_Click() Dim a(1 To 100) As Boolean, n As Integer, k As Integer, i As Integer n = Val(Text1.Text) For i = 1 To 100 a(i) = False Next i a(n) = True Do While n <> 0 i = 1 Do While i <= n ① i = i + 1 Loop If n = 0 Then Text2.Text = Str(k) Else If k = 0 Then k = 1 n = n + k If ② Then k = k + 1 n = Val(Text1.Text) Else a(n) = True End If End If Loop End Sub
(1)
由代码可知,“计算”按钮的对象名是。
(2)
程序加框处代码有错,请改正。
(3)
请在划线处填入合适的代码。
① ②
答案: 【1】ok
k=0
【1】n = n - i【2】a(n) 或 a(n)=true