0

これには少し圧倒された気分です。質問と私のコードの開始は以下のとおりです。これが正しい軌道に乗っているかどうか誰か教えてもらえますか? そうでない場合は、お手伝いいただけますか?どんな提案でも大歓迎です。前もって感謝します。(これは私の最終的なコードではなく、問題の始まりにすぎません)。

顧客は特定の量の用紙を必要としています。用紙の料金は、1 枚で 0.10 ドル、100 枚の倍数で 1 枚あたり 0.055 ドル、500 枚の倍数で 1 枚あたり 0.04 ドル、1000 枚の倍数で 1 枚あたり 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 

上記で指定した関数で繰り返し呼び出すことができます。

最後に 1 つだけ警告します。たとえば、最後の残りが 49 枚である場合、より大きなパッケージで過剰に購入することにはお金がかかる場合があります。

于 2012-09-19T15:28:25.233 に答える