.net 您如何计算交易的最低硬币兑换率?

.net 您如何计算交易的最低硬币兑换率?,.net,vb.net,coin-change,.net,Vb.net,Coin Change,大家好。我有个问题。我正在使用Visual Basic Express,我应该计算事务的更改 现在我将使用什么代码?我让它部分工作,但它开始变得有点混乱 多谢各位 对于你们这些想要更多信息的人: 假设我有一美元,我去商店买东西。我必须要求用户输入他们花费的金额,然后计算更改并打印到屏幕上 然后,我应该使用最少数量的25美分、10美分、5美分和1美分,并将其打印到屏幕上 任何帮助都将不胜感激。我将在这里冒险一试,假设OP谈论的是从交易中返还的钱的变化 如果是这样的话,那可能是家庭作业,所以只需要伪

大家好。我有个问题。我正在使用Visual Basic Express,我应该计算事务的更改

现在我将使用什么代码?我让它部分工作,但它开始变得有点混乱

多谢各位

对于你们这些想要更多信息的人:

假设我有一美元,我去商店买东西。我必须要求用户输入他们花费的金额,然后计算更改并打印到屏幕上

然后,我应该使用最少数量的25美分、10美分、5美分和1美分,并将其打印到屏幕上


任何帮助都将不胜感激。

我将在这里冒险一试,假设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