演算法練習--小球下落,--小球下落
小球下落:
完全二叉樹,最大深度D。所有節點從上到下從左至右編號為1,2,3...2的D次方-1.在節點1處放一個小球,它會往下落。每個內節點上都由一個開關,初始全部關閉,當每次有小球落到一個開關上時,它的狀態都會改變。當小球達到一個內節點時,如果該節點上的開關關閉,往左走,否則往右走,直到遍曆到葉子節點。
問題,輸入 深度和小球個數
輸出節點編號
輸入 4 2 輸出 12
輸入 3 4 輸出 7
參考實現
function f(depth,count){var states = new Array();var r;for(var i = 0;i < count;i++){for(var root = 1;root <Math.pow(2,depth-1);){if(states[root] && states[root].open){states[root].open = false;root = root * 2 + 1;}else{if(!states[root]){states[root]={open:true};}else if(states[root].open == false){states[root].open = true;}root = root * 2;}r=root;}}return r;}console.log(f(4,2));console.log(f(3,4));console.log(f(10,1));console.log(f(2,2));console.log(f(8,128));console.log(f(16,12345));
VB的小球下落的問題
Private Sub Command1_Click()
Dim n As Double
Dim sum As Double
sum = 10
n = 2 / 3
h = 10
For i = 1 To 9
h = h * n '計算每次最大高度
sum = sum + h * 2 '每次落地計算上升和下降兩次路程
Next
MsgBox "計算第10次落地時運動的總路程為:" & sum
End Sub
Private Sub Command2_Click()
Dim debt As Double '要還的錢
Dim aleadyPay As Double '已還的錢
Dim x As Double '利率
Dim year As Integer '還錢年數
debt = 10
aleadyPay = 0
x = 0.07
year = 0
Do While aleadyPay < debt
debt = debt * (1 + x)
aleadyPay = aleadyPay + 3
year = year + 1
Loop
MsgBox ("要還" & year & "年" & Chr(13) & Chr(10) & "最後一年還錢" & (debt - aleadyPay + 3) & "萬元")
End Sub
你補充的問題,sum每次都被賦值為10,失去程式的意義了
物理進,小球下落路徑問題:小球下落,直至彈跳停止為止所通過的路線總長度
其實很簡單的,有兩個方法。
1,計算每一次彈跳的路徑,然後相加,最後會列出一個等差數列,數學應該學過了,算一下就行。不過有點煩。
2,簡單一點,當你去計算小球每一次下落,每一次彈起所做的功會發現,第一次下落和第二次上彈所做功正好可以抵消,以此類推,就是說第一次上彈和最後一次下落所做功相加為零,即kmgs=mgh,所以s=k/h