第38~40讲-循环章节大习题讲解
Sub 练习题1() '高空落球
Dim ballTrace As Double, fantan As Double, currentFall As Double, i As Long
For i = 1 To 10
If i = 1 Then
ballTrace = 100
currentFall = 100
Else
fantan = currentFall / 2 '反弹高度是当次坠落的高度的一半
currentFall = fantan '坠落的高度 = 反弹高度
ballTrace = ballTrace + currentFall + fantan
End If
Next
MsgBox "第10次球落到地面上时总运行距离为" & ballTrace & "米。" & vbCr & _
"反弹高度为" & fantan & "米。"
End Sub
Sub 练习题2() '输入一个正整数对它进行质因数分解
Dim input_n As Long, divN As Long, pi As Long
'pi 代表质因数,divN 代表辗转相除法的被除数
Dim pStr As String
input_n = InputBox("请输入一个正整数")
divN = input_n
pi = 2
pStr = input_n & "="
Do While divN <> pi
If divN Mod pi = 0 Then
divN = divN / pi
pStr = pStr & pi & "*"
Else
pi = pi + 1
End If
Loop
pStr = pStr & pi
Debug.Print pStr
End Sub
'1,2,3,4 能组成多少个不重复的3位数
Sub 练习题3()
Dim i&, j&, k&, count&
For i = 1 To 4
For j = 1 To 4
For k = 1 To 4
If i <> j And j <> k And i <> k Then
count = count + 1
Debug.Print i * 100 + j * 10 + k
End If
Next k
Next j
Next i
MsgBox "共有" & count & "个不同的3位数组合"
End Sub
Sub 练习题4() '小喵分鱼
Dim cats As Long, fishes As Long
'总鱼数是一定的
'cats *6 -20 = cats*5+15
Do While cats * 6 - 20 <> cats * 5 + 15
cats = cats + 1
Loop
fishes = cats * 6 - 20
MsgBox "共有小喵" & cats & "只,参与分配" & fishes & "条鱼。"
End Sub
'规则是 第i 个业务员 之前的总额/2 +他的顺序*100
Sub 练习题5()
Dim 奖金总额 As Double, 待分配金额 As Double, i As Long
奖金总额 = 100
Do While 待分配金额 <> 100
奖金总额 = 奖金总额 + 1
待分配金额 = 奖金总额
For i = 1 To 4
待分配金额 = 待分配金额 - (待分配金额 / 2 + i * 100)
Next
Loop
'============ 上面部分是计算奖金总额的===============
'=========== 下面部分是为了输出每个人的分配奖金==========
待分配金额 = 奖金总额
For i = 1 To 4
Debug.Print "第" & i & "个业务员的奖金分配是" & (待分配金额 / 2 + i * 100) & "元"
待分配金额 = 待分配金额 - (待分配金额 / 2 + i * 100)
Next
Debug.Print "第5个业务员的奖金分配额度是" & 100 & "元"
Debug.Print "分配的总奖金数是" & 奖金总额
End Sub
'喝啤酒问题:1瓶啤酒卖2元 ,4个盖能换一瓶酒,2个瓶也能换一瓶酒
'张三有10块钱,最多能喝多少酒
'第二问
Sub 喝啤酒()
Dim beers As Long, caps As Long, bottles As Long
Dim 当次盖换酒&, 当次瓶换酒&
beers = 10 / 2
caps = beers
bottles = beers
'换的过程
Do While caps >= 4 Or bottles >= 2
当次盖换酒 = Int(caps / 4)
当次瓶换酒 = Int(bottles / 2)
beers = beers + 当次盖换酒 + 当次瓶换酒
caps = caps Mod 4 + 当次盖换酒 + 当次瓶换酒
bottles = bottles Mod 2 + 当次瓶换酒 + 当次盖换酒
Loop
MsgBox "张三共喝了" & beers & "瓶啤酒" & vbCr & _
"还剩下" & bottles & "个空瓶。" & caps & "个瓶盖."
End Sub
Sub 喝啤酒第二问()
Dim beers As Long, caps As Long, bottles As Long
Dim 当次盖换酒&, 当次瓶换酒&
beers = 10 / 2
caps = beers + 1
bottles = beers + 1
'换的过程
Do While caps >= 4 Or bottles >= 2
当次盖换酒 = Int(caps / 4)
当次瓶换酒 = Int(bottles / 2)
beers = beers + 当次盖换酒 + 当次瓶换酒
caps = caps Mod 4 + 当次盖换酒 + 当次瓶换酒
bottles = bottles Mod 2 + 当次瓶换酒 + 当次盖换酒
Loop
MsgBox "张三共喝了" & beers - 1 & "瓶啤酒" & vbCr & _
"还剩下" & bottles - 1 & "个空瓶。" & caps - 1 & "个瓶盖."
End Sub