0

質問は次のとおりです。顧客は特定の量の紙を必要としています。紙の料金は次のとおりです。

  • 単一シートの場合は.10。
  • 100の倍数でシートあたり.055。
  • 500の倍数でシートあたり.04。
  • 1000の倍数でシートあたり.03。

どこかでmod除算を使用する必要があることを知っています。変数が正しく設定されているかどうかわかりません。脳が溶けようとしています。悲しいですよね?はは。これについて助けていただければ幸いです。乾杯 :)

Option Explicit On

Imports system

Module paperp
    Sub Main()

        Dim papercost As Double
        Dim onetpackage As Integer
        Dim fivehpackages As Integer
        Dim onehpackages As Integer
        Dim singlesheets As Integer

        Console.Writeline("Number of 1000 packages:")
        onetpackage = convert.toint32(Console.Readline())

        Console.Writeline("Number of 500 packages:")
        fivehpackages = convert.toint32(Console.Readline())

        Console.Writeline("Number of 100 packages:")
        onehpackages = convert.toint32(Console.Readline())

        Console.Writeline("Number of single sheets:")
        singlesheets = convert.toint32(console.Readline())

        Console.Out.Writeline("Number of 1000 packages:")
        Console.Out.Writeline(onetpackage)
        Console.Out.Writeline("Number of 500 packages:")
        Console.Out.Writeline(fivehpackages)
        Console.Out.Writeline("Number of 100 packages:")
        Console.Out.Writeline(onehpackages)
        Console.Out.Writeline("Number of single sheets:")
        Console.Out.Writeline(singlesheets)
        Console.Out.Writeline("Your total Cost is:")
        Console.Out.Writeline(papercost)

    End Sub
End Module
4

3 に答える 3

1

各量(たとえば、1000、500、100、1)をループして、ユーザーが変数に指定するシートの数がない場合、ロジックは次のようになります。

事前定義された変数:no_of_sheets(ユーザー入力)、working_amount = no_of_sheets、current_index = 0、count = 0、amounts(array)=(1000、500、100、1)、costs =(0.03、0.04、0.055、0.1)、total =(0、0、0、0)

While (working_amount > 0)
  if current_index < 4
    if (working_amount - amounts[current_index]) >= 0
      total[current_index]++
      working_amount = working_amount - amounts[current_index]
    else
      current_index++
    endif
  endif
endwhile

これで、各ブロックの量を含む配列ができました。たとえば、(1、2、3、4)の配列は、1 x 1000シート、2 x 500、3 x 100、4x1を意味します。

次に、各ビットに価格を掛けるだけです。

役立つ希望。

于 2012-09-23T23:33:59.010 に答える
1

そのコードを使用すると、パッケージごとの価格を追加する必要があります。

papercost = _
  0.03 * 1000.0 * onetpackage + _
  0.04 * 500 * fivehpackages + _
  0.055 * 100 * onehpackages + _
  0.1 * singlesheets

ただし、割り当てを理解するためには、実際には総シート数を入力してからパッケージ数を計算するだけでよいと思います。パッケージの数を計算した後、モジュロを使用して残りのシートを計算することもできますが、減算を使用するのも同じくらい簡単です。

  onetpackage = Math.Floor(totalsheets / 1000)
  totalsheets -= onetpackage * 1000
于 2012-09-23T23:34:51.407 に答える
0

あなたの課題の質問はナップサック問題の例ですが、幸いなことにそれの非常に単純な変形です。

必ずしもモジュロ演算子を使用する必要はありません。繰り返し使用できます。最も高価な製品(アイテムあたりの価格の比率が最も高い)から始めて、開始したお金でできるだけ多くを「購入」し(余裕がなくなるまでお金から差し引いてください)、次に進みます次の魅力的な製品に移動し、何も買う余裕がなくなるまで繰り返します。

于 2012-09-23T23:33:36.230 に答える