0

C# でショッピング カートがあるサイトを実装しています。

データベースにこれらの製品があるとしましょう

製品 A の価格 50
製品 B の価格 50
製品 C の価格 50
製品 D の価格 50

ユーザーはこれらの製品をカートに追加できます。

現在、オファーが実行されています。ユーザーは、製品 A または製品 B を 3 個購入できます (これらの任意の組み合わせ - 例: 製品 A の 2 個と製品 B の 1 個、または製品 A の 3 個すべて)。

(つまり、この例では、彼が 3 個購入した場合、100 を支払う必要があり、4 個購入した場合は 150 を支払う必要があり、5 個購入した場合は 200 を支払う必要があり、6 個購入した場合も 200 を支払う必要があります)

これを実装するアルゴリズム\疑似コードを取得するにはどうすればよいですか?

人間の問題は、製品を任意の順序で追加できることです。たとえば、製品は
、A、A、A、
または
2A、B
、または
A、C、D、B、A、
または
A、C、C、A の順序で追加されます。

2A は、1 回のアクションで 2 個の製品 A を追加したことを意味します。(最後の場合、彼はその申し出を利用しません)

これを解決する最も簡単な方法を教えてください。そのようなことが解決されているコードを誰かが指摘できますか

4

2 に答える 2

2

購入されている製品 A と製品 B の合計数を取得し、3 で割ると、無料の製品の数がわかります。例えば。

int cost = 50;
int a = numOfProductA();
int b = numOfProductB();
int total = a + b;
int totalFree = total/3;
int totalCost = (total - totalFree)*cost;

これを行うための効率的な方法があるかもしれませんが、より多くの情報があればよいでしょう:) AまたはBの数を取得するのは難しいですか?あなたがすでに試したことを示すコードは良いでしょう。

編集:あなたのコメントに応えて、それは非常に似たロジックになります。前の例から自分で理解できると確信しているので、コードは提供しません。それは、より良い学習に役立つでしょう:)しかし、大まかに言えば、最初に5 Aのインスタンスを見つけてから削除します購入数からAかBの無料品を3つ割り出します。(例: 7 A と 1 B の場合、5 A が存在することを見つけ、2 つを無料で与え、残りを計算します。したがって、2 A と 1 B で 2 番目のオファーを計算します)

于 2012-05-22T06:21:54.597 に答える
1

多分これはあなたを助けるでしょう:

取引例: PRODUCT_A を 4 つ購入すると、PRODUCT_B2 つ無料

変数:

  • numSkuRequired: 取引に必要な商品の数 (この場合は 4)
  • skuRequired: 取引が機能するために必要な製品 (この場合、 PRODUCT_Aの識別子、sku/id など)
  • numSkuFree: 無料で提供される製品の数 (この場合は 2)
  • skuFree: 無料で配布される製品 (この場合、 PRODUCT_Bの識別子、sku/id など)
  • quantityLookupRequired:カート内のPRODUCT_Aの合計数量、デフォルトfalse
  • quantityLookupFree:カート内のPRODUCT_Bの合計数量、デフォルトfalse
  • quantityFree: 合計金額を計算するために探している最終結果、無料の製品の数 ( PRODUCT_B )、デフォルト0
  • price: PRODUCT_Bの価格、デフォルト0
  • discount: 合計割引額、デフォルト0

手順

  1. カート内の PRODUCT_A の合計を検索し、変数に保存しますquantityLookupRequired
  2. であることを確認しquantityLookupRequiredます>= numSkuRequired
  3. カート内の PRODUCT_B の合計を検索し、変数に保存しますquantityLookupFree
  4. であることを確認しquantityLookupFreeます>= numSkuFree
  5. PRODUCT_B の価格を見つけて変数に保存するprice
  6. ループ (下記参照) を検索しますquantityFree(エディターは、これをより良く見せることを許可していません。申し訳ありません)。
  7. discountになりますquantityFree * price

for(int i = 0; i < numSkuRequired + numSkuFree; i <= quantityLookupRequired + quantityLookupFree; i += (numSkuRequired + numSkuFree)) { quantityFree += numSkuFree; } while(quantityFree % numSkuFree != 0)/* don't allow partial discounts */ { quantityFree--; } discount = quantityFree * price;

注: 取引に含まれる製品が 1 つだけの場合は、少し異なるアプローチが取られます (PRODUCT_A を 4 つ購入すると、PRODUCT_A2 つ無料で入手できます) 。

于 2012-10-15T16:09:52.063 に答える