0

我对此感到有些不知所措。我的代码的问题和开头如下。有人能告诉我这是否走在正确的轨道上吗?如果没有,你能帮忙吗?任何建议表示赞赏。先感谢您。(这不是我的最终代码,只是问题的开始)。

客户需要特定数量的纸张。单张纸的费用为 0.10 美元,100 张的倍数为每张 0.055 美元,500 张的倍数为每张 0.04 美元,1000 张的倍数为每张 0.03 美元。考虑到客户需要的纸张数量,开发一种解决方案来计算客户应该购买的最少金额的包裹类型和数量。例如,如果客户需要 380 张,则购买 100 的倍数时她将支付的金额为 22.00 美元。但是,如果客户购买了 500 张,则成本为 20.00 美元。因此,客户购买一包 500 张的价格合算。(提示:使用模除法 (Mod) 求除法的余数)。

Imports System

Module Paper

    Sub Main()

      Dim Name as String
      Dim OrderNumber as String
      Dim Paper as Integer
      Dim Thousandpaper as Integer
      Dim FiveHundredPaper as Integer
      Dim FirstCut as Integer
      Dim SecondCUt as Integer

      'User Input Begins Here:
      Console.WriteLine("Hello! What is your name?")
      Name = console.readline()

      Console.WriteLine("Please enter a order number:")
      OrderNumber = console.readline()

      Console.WriteLine("Finally ,how much paper would you like?")
      Paper = console.readline()

      If (Paper > 1000)
        Thousandpaper = (Paper / 1000)
      End If

      If (Thousandpaper) > Paper Then
        GoTo 44
      End If

      FirstCut = (Paper mod 1000)

      If (FirstCut > 500)
        FiveHundredPaper= (FirstCut / 500)
      End If

      SecondCut = (FirstCut / 500)      

      44: Console.WriteLine("1000 paper pack:")
      Console.WriteLine(Thousandpaper)      
      Console.WriteLine("500 paper pack:")
      Console.WriteLine(FirstCut)                  

    End Sub

End Module
4

2 回答 2

6

让我给你一些一般性的提示:

  1. VB.NET 中的模数是使用Mod运算符完成的。这回答了您标题中的问题,但不会帮助您解决当前的问题。
  2. 停止编码。拿一张纸,试着从数学的角度来解决这个问题。尝试为问题陈述中要求的优化找到一个算法(在伪代码中)。
  3. 只有当你有了你的算法并且你相当确定它是正确的之后,才开始用你选择的语言(VB.NET)来实现它。
于 2012-09-19T14:56:53.127 回答
1

编辑

首先从@Heinzi 的回答中获取建议是有道理的。我只能对“自上而下”的方法做出明智的尝试,因为我已经了解核心算法的结构。


这是一些面向对象的方法,可以帮助您入门。

Public Structure PaperPackage
    Public Size As Integer
    Public PricePerSheet As 
End Structure

Dim availablePackages = New List(of PaperPackage) _
    { _
        New PaperPackage With { .Size = 1000, .PricePerSheet = 0.03 }, _
        New PaperPackage With { .Size = 500, .PricePerSheet = 0.04 }, _
        New PaperPackage With { .Size = 100, .PricePerSheet = 0.055 }, _
        New PaperPackage With { .Size = 1, .PricePerSheet = 0.1 } _
    }

然后你可能想写一个带有这样签名的函数,

Public Shared Function CheapestPaperChoices( _
    availableChoices As IList(of PaperPackage), _
    requiredSheets As Integer) As IDictionary(Of PaperPackage, Integer)

这将返回一个IDictionary包含所需的每个纸包和Integer数量的计数。

为了提供更多帮助,您可能会发现,如果您编写函数,

Public Structure PackagesThatFitResult
    Public Quantity As Integer
    Public NewRemainingSheets As Integer 
End Structure

Private Shared Function PackagesThatFit( _
    remainingSheets As Integer, _
    package As PaperPackage) As PackagesThatFitResult 

你可以在我上面指定的函数中迭代地调用它。

只是最后一个警告,您可能会发现购买更大的包装是值得的,如果说,您的最后剩余部分是 49 张。

于 2012-09-19T15:28:25.233 回答