.net 您如何计算交易的最低硬币兑换率?
大家好。我有个问题。我正在使用Visual Basic Express,我应该计算事务的更改 现在我将使用什么代码?我让它部分工作,但它开始变得有点混乱 多谢各位 对于你们这些想要更多信息的人: 假设我有一美元,我去商店买东西。我必须要求用户输入他们花费的金额,然后计算更改并打印到屏幕上 然后,我应该使用最少数量的25美分、10美分、5美分和1美分,并将其打印到屏幕上.net 您如何计算交易的最低硬币兑换率?,.net,vb.net,coin-change,.net,Vb.net,Coin Change,大家好。我有个问题。我正在使用Visual Basic Express,我应该计算事务的更改 现在我将使用什么代码?我让它部分工作,但它开始变得有点混乱 多谢各位 对于你们这些想要更多信息的人: 假设我有一美元,我去商店买东西。我必须要求用户输入他们花费的金额,然后计算更改并打印到屏幕上 然后,我应该使用最少数量的25美分、10美分、5美分和1美分,并将其打印到屏幕上 任何帮助都将不胜感激。我将在这里冒险一试,假设OP谈论的是从交易中返还的钱的变化 如果是这样的话,那可能是家庭作业,所以只需要伪
任何帮助都将不胜感激。我将在这里冒险一试,假设OP谈论的是从交易中返还的钱的变化 如果是这样的话,那可能是家庭作业,所以只需要伪代码 最简单的第一次尝试方法如下。让
成本
为交易成本,投标
为移交的金额(均以美分为单位),让我们进一步假设您的经济只有美元、25美分和便士(使我的代码更小)
然后在你的头脑中一行一行地运行代码,使用纸上的当前值,并在它们变化的地方写下新值
这将大大有助于你的理解
针对您的更新: 我有一美元,我去商店买东西。我必须要求用户输入他们花费的金额,然后计算更改并打印到屏幕上。然后我应该使用最少数量的25美分、10美分、5美分和1美分,然后打印到屏幕上 这与我上面提到的非常相似:
tendered = 100
input cost
cost = int (cost * 100)
change = tendered - cost
if change < 0:
print "Pay up some more cash, cheapskate!"
stop
print "Change is ", (format "$9.99", change / 100)
quarters = 0, dimes = 0, nickels = 0, pennies = 0
while change >= 25:
quarters = quarters + 1
change = change - 25
while change >= 10:
dimes = dimes + 1
change = change - 10
while change >= 5:
nickels = nickels + 1
change = change - 5
while change >= 1:
pennies = pennies + 1
change = change - 1
print quarters, " quarters"
print dimes , " dimes"
print nickels , " quarters"
print pennies , " pennies"
tender=100
投入成本
成本=整数(成本*100)
变更=投标-成本
如果变化小于0:
打印“多付点现金,小气鬼!”
停止
打印“更改为”(格式“$9.99”,更改/100)
四分之一硬币=0,一角硬币=0,五分镍币=0,便士=0
当更改>=25时:
四分之一=四分之一+1
改变=改变-25
当更改>=10时:
一角硬币=一角硬币+1
改变=改变-10
当更改>=5时:
镍币=镍币+1
改变=改变-5
当更改>=1时:
便士=便士+1
改变=改变-1
打印季度,“季度”
打印一角硬币,“一角”
打印五分镍币,“四分之一”
打印便士,“便士”
自动化流程的更“先进”的方法是:
Private Function CalculateChange(ByVal dAmount As Decimal) As Decimal()
Dim arrNotesAvailable() As Decimal = {200D, 100D, 50D, 20D, 10D, 5D, 2D, 1D, 0.5D, 0.2D, 0.1D, 0.05D, 0.02D, 0.01D}
Dim arrChangeAmounts(arrNotesAvailable.Length - 1) As Decimal
For iIndex As Integer = 0 To arrNotesAvailable.Length - 1
arrChangeAmounts(iIndex) = dAmount \ arrNotesAvailable(iIndex)
dAmount = dAmount Mod arrNotesAvailable(iIndex)
Next
Return arrChangeAmounts
End Function
这将自动返回一个数组,该数组填充了要发行的每个单位的确切数量
更高级的解决方案:
Private Function CalculateChange(ByVal dAmount As Decimal) As Decimal()
Dim arrNotesAvailable() As Decimal = {200D, 100D, 50D, 20D, 10D, 5D, 2D, 1D, 0.5D, 0.2D, 0.1D, 0.05D}
Dim arrChangeAmounts(arrNotesAvailable.Length - 1) As Decimal
For iIndex As Integer = 0 To arrNotesAvailable.Length - 2
arrChangeAmounts(iIndex) = (dAmount * 100) \ (arrNotesAvailable(iIndex) * 100)
dAmount = dAmount Mod arrNotesAvailable(iIndex)
Next
arrChangeAmounts(arrNotesAvailable.Length - 1) = Math.Ceiling((dAmount * 100) / (arrNotesAvailable(arrNotesAvailable.Length - 1) * 100))
Return arrChangeAmounts
End Function
这将把所需的纸币和硬币数量分解到最后一个指定的第二个单位,然后用最小的货币单位“填充”剩余的部分。对于那些单位不超过1(1美分或1日元)的国家。在我们国家,我们的交易额一直到5美分。刚刚完成了一项类似的任务。 公开课表格1 姓名:亚伦假日酒店 '类别:IME 211 '目的:更改计算
Dim Owed As Double
Dim Tend As Double
Dim Change As Double
Dim _20D As Integer
Dim _10D As Integer
Dim _5D As Integer
Dim _1D As Integer
Dim _25C As Integer
Dim _10C As Integer
Dim _5C As Integer
Dim _1C As Integer
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
Close()
End Sub
Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
'Clear Due Amounts
txtOwed.Text = ""
txtTend.Text = ""
lblChange.Text = ""
'Clear Dollar Amounts
lbl20D.Text = ""
lbl10D.Text = ""
lbl5D.Text = ""
lbl1D.Text = ""
'Clear Cents Amounts
lbl25C.Text = ""
lbl10C.Text = ""
lbl5C.Text = ""
lbl1C.Text = ""
txtOwed.Focus()
End Sub
Private Sub btnRing_Click(sender As Object, e As EventArgs) Handles btnRing.Click
'Check to see if Empty
If ((txtOwed.Text) = Nothing) Then
lblChange.Text = ("Error")
MessageBox.Show("Please Enter Amount Owed")
Exit Sub
End If
If ((txtTend.Text) = Nothing) Then
lblChange.Text = ("Error")
MessageBox.Show("Please Enter Amount Tendered")
Exit Sub
End If
'Set Dim Values
Owed = txtOwed.Text
Tend = txtTend.Text
'Calculate Change due
Change = (Tend - Owed)
lblChange.Text = Change.ToString("C2")
'Check if they paid enough
If ((lblChange.Text) < 0) Then
lblChange.Text = ("Pay Up!")
MessageBox.Show("Please Pay full Amount!")
Exit Sub
End If
'Set Dim Values
_20D = 0 '$20
_10D = 0 '$10
_5D = 0 '$5
_1D = 0 '$1
_25C = 0 '$0.25
_10C = 0 '$0.10
_5C = 0 '$0.05
_1C = 0 '$0.01
'Find Amounts of Each
Do While Change >= 20
_20D = _20D + 1
Change = Change - 20
Loop
'Display $20s
lbl20D.Text = _20D
'================================================
Do While Change >= 10
_10D = _10D + 1
Change = Change - 10
Loop
'Display $10s
lbl10D.Text = _10D
'================================================
Do While Change >= 5
_5D = _5D + 1
Change = Change - 5
Loop
'Display $5s
lbl5D.Text = _5D
'================================================
Do While Change >= 1
_1D = _1D + 1
Change = Change - 1
Loop
'Display $1s
lbl1D.Text = _1D
'================================================
Do While Change >= 0.25
_25C = _25C + 1
Change = Change - 0.25
Loop
'Display $0.25s
lbl25C.Text = _25C
'================================================
Do While Change >= 0.1
_10C = _10C + 1
Change = Change - 0.1
Loop
'Display $0.10s
lbl10C.Text = _10C
'================================================
Do While Change >= 0.05
_5C = _5C + 1
Change = Change - 0.05
Loop
'Display $0.05s
lbl5C.Text = _5C
'================================================
Do While Change >= 0.01
_1C = _1C + 1
Change = Change - 0.01
Loop
'Display $0.01s
lbl1C.Text = _1C
'Display Thank you
If ((lblChange.Text) >= 0) Then
MessageBox.Show("Thank you, Come Again")
End If
End Sub
End Class
双精度
暗淡的有双重的倾向
变暗为双倍
Dim_20D为整数
作为整数的Dim_10D
作为整数的Dim_5D
Dim_1D为整数
Dim_25C作为整数
尺寸10C为整数
作为整数的Dim_5C
作为整数的Dim_1C
私有子btnExit\u单击(发送者作为对象,e作为事件参数)处理btnExit。单击
关闭()
端接头
私有子btnClear\u单击(发送者作为对象,e作为事件参数)处理btnClear。单击
“清理到期金额
txtown.Text=“”
txtTend.Text=“”
lblChange.Text=“”
“净美元金额
lbl20D.Text=“”
lbl10D.Text=“”
lbl5D.Text=“”
lbl1D.Text=“”
“净价
lbl25C.Text=“”
lbl10C.Text=“”
lbl5C.Text=“”
lbl1C.Text=“”
焦点()
端接头
私有子btnRing\u单击(发送者作为对象,e作为事件参数)处理btnRing。单击
'检查是否为空
如果((txtown.Text)=无),则
lblChange.Text=(“错误”)
MessageBox.Show(“请输入欠款金额”)
出口接头
如果结束
如果((txtTend.Text)=无),则
lblChange.Text=(“错误”)
MessageBox.Show(“请输入投标金额”)
出口接头
如果结束
'设置暗值
owe=txtowne.Text
Tend=txtTend.Text
'计算到期的更改
变化=(趋势-欠下)
lblChange.Text=Change.ToString(“C2”)
“检查他们是否付了足够的钱
如果((lblChange.Text)<0),则
lblChange.Text=(“付款!”)
MessageBox.Show(“请全额支付!”)
出口接头
如果结束
'设置暗值
_20D=0'$20
_10D=0'$10
_5D=0'$5
_1D=0'$1
_25C=0'$0.25
_10C=0'$0.10
_5C=0'$0.05
_1C=0'$0.01
“找到每一个的数量
更改>=20时执行此操作
_20D=_20D+1
改变=改变-20
环
“展示20美元
lbl20D.Text=\u 20D
'================================================
更改>=10时执行此操作
_10D=_10D+1
改变=改变-10
环
“显示10美元
lbl10D.Text=\u 10D
'================================================
更改>=5时执行此操作
_5D=_5D+1
改变=改变-5
环
'显示$5s
lbl5D.Text=_5D
'================================================
更改>=1时执行此操作
_1D=_1D+1
改变=改变-1
环
'显示$1s
lbl1D.Text=\u 1D
'================================================
更改时执行>=0.25
_25C=_25C+1
变化=变化-0.25
环
'显示$0.25秒
lbl25C.Text=\u 25C
'================================================
更改时执行>=0.1
_10C=_10C+1
更改=更改-0.1
环
'显示$0.10秒
lbl10C.Text=\u 10C
'================================================
更改时执行>=0.05
_5C=_5C+1
变化=变化-0.05
环
'显示$0.05秒
lbl5C.Text=_5C
Private Function CalculateChange(ByVal dAmount As Decimal) As Decimal()
Dim arrNotesAvailable() As Decimal = {200D, 100D, 50D, 20D, 10D, 5D, 2D, 1D, 0.5D, 0.2D, 0.1D, 0.05D}
Dim arrChangeAmounts(arrNotesAvailable.Length - 1) As Decimal
For iIndex As Integer = 0 To arrNotesAvailable.Length - 2
arrChangeAmounts(iIndex) = (dAmount * 100) \ (arrNotesAvailable(iIndex) * 100)
dAmount = dAmount Mod arrNotesAvailable(iIndex)
Next
arrChangeAmounts(arrNotesAvailable.Length - 1) = Math.Ceiling((dAmount * 100) / (arrNotesAvailable(arrNotesAvailable.Length - 1) * 100))
Return arrChangeAmounts
End Function
Dim Owed As Double
Dim Tend As Double
Dim Change As Double
Dim _20D As Integer
Dim _10D As Integer
Dim _5D As Integer
Dim _1D As Integer
Dim _25C As Integer
Dim _10C As Integer
Dim _5C As Integer
Dim _1C As Integer
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
Close()
End Sub
Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
'Clear Due Amounts
txtOwed.Text = ""
txtTend.Text = ""
lblChange.Text = ""
'Clear Dollar Amounts
lbl20D.Text = ""
lbl10D.Text = ""
lbl5D.Text = ""
lbl1D.Text = ""
'Clear Cents Amounts
lbl25C.Text = ""
lbl10C.Text = ""
lbl5C.Text = ""
lbl1C.Text = ""
txtOwed.Focus()
End Sub
Private Sub btnRing_Click(sender As Object, e As EventArgs) Handles btnRing.Click
'Check to see if Empty
If ((txtOwed.Text) = Nothing) Then
lblChange.Text = ("Error")
MessageBox.Show("Please Enter Amount Owed")
Exit Sub
End If
If ((txtTend.Text) = Nothing) Then
lblChange.Text = ("Error")
MessageBox.Show("Please Enter Amount Tendered")
Exit Sub
End If
'Set Dim Values
Owed = txtOwed.Text
Tend = txtTend.Text
'Calculate Change due
Change = (Tend - Owed)
lblChange.Text = Change.ToString("C2")
'Check if they paid enough
If ((lblChange.Text) < 0) Then
lblChange.Text = ("Pay Up!")
MessageBox.Show("Please Pay full Amount!")
Exit Sub
End If
'Set Dim Values
_20D = 0 '$20
_10D = 0 '$10
_5D = 0 '$5
_1D = 0 '$1
_25C = 0 '$0.25
_10C = 0 '$0.10
_5C = 0 '$0.05
_1C = 0 '$0.01
'Find Amounts of Each
Do While Change >= 20
_20D = _20D + 1
Change = Change - 20
Loop
'Display $20s
lbl20D.Text = _20D
'================================================
Do While Change >= 10
_10D = _10D + 1
Change = Change - 10
Loop
'Display $10s
lbl10D.Text = _10D
'================================================
Do While Change >= 5
_5D = _5D + 1
Change = Change - 5
Loop
'Display $5s
lbl5D.Text = _5D
'================================================
Do While Change >= 1
_1D = _1D + 1
Change = Change - 1
Loop
'Display $1s
lbl1D.Text = _1D
'================================================
Do While Change >= 0.25
_25C = _25C + 1
Change = Change - 0.25
Loop
'Display $0.25s
lbl25C.Text = _25C
'================================================
Do While Change >= 0.1
_10C = _10C + 1
Change = Change - 0.1
Loop
'Display $0.10s
lbl10C.Text = _10C
'================================================
Do While Change >= 0.05
_5C = _5C + 1
Change = Change - 0.05
Loop
'Display $0.05s
lbl5C.Text = _5C
'================================================
Do While Change >= 0.01
_1C = _1C + 1
Change = Change - 0.01
Loop
'Display $0.01s
lbl1C.Text = _1C
'Display Thank you
If ((lblChange.Text) >= 0) Then
MessageBox.Show("Thank you, Come Again")
End If
End Sub
End Class