-1

ml 単位の量と 3 つのパック サイズ (20ml、200ml、1000ml) が与えられた場合、合計量を満たすために必要な各パックの数を計算したいと思います。

例えば

Amount = 3210ml
1000ml = 3 packs
200ml = 1 pack
20ml = 1 pack (always round up to nearest quantity)

これはほとんど変化計算機のようなもので、正しい方法を探しています。

これが私の試みです

public class PackSizeCalculator
{
    private const int LargePackSize = 1000;
    private const int MediumPackSize = 200;
    private const int SmallPackSize = 20;

    public int LargePacks {get; set;}
    public int MediumPacks {get; set;}
    public int SmallPacks {get; set;}

    public  PackSizeCalculator(int amount)
    {
        int remainder = amount;

        while(remainder > 0) {
            if(remainder >= LargePackSize)
            {
                LargePacks = remainder / LargePackSize;
                remainder = remainder % LargePackSize;
            }
            else if(remainder >= MediumPackSize)
            {
                MediumPacks = remainder / MediumPackSize;
                remainder = remainder % MediumPackSize;
            }
            else if(remainder > SmallPackSize)
            {
                if(remainder % SmallPackSize == 0)
                {
                    SmallPacks = (remainder / SmallPackSize);
                }
                else {
                    SmallPacks = (remainder / SmallPackSize) + 1;
                }
                remainder = 0;
            }
            else {
                SmallPacks = 1;
                remainder = 0;
            }
        }
    }
}

これは良い方法ですか、それとも別の方法をお勧めしますか?

4

2 に答える 2

1

このようなもの:

const int LARGE_PACK = 1000;
const int MEDIUM_PACK = 200;
const int SMALL_PACK = 20;

int largePacks = (int)(Amount / LARGE_PACK);
int mediumPacks = (int)((Amount % LARGE_PACK) / MEDIUM_PACK);
int smallPacks = (int)ceil(((float)((Amount % LARGE_PACK) % MEDIUM_PACK) / SMALL_PACK));
于 2011-02-13T07:30:43.843 に答える
0

次のような関数を作成できます。

struct Change
{
    public int  Large;
    public int  Medium;
    public int  Small;
}
private Change CalculateChange(int TotalAmount)
{
    Change result;
    result.Large = TotalAmount >= 1000 ? TotalAmount / 1000 : 0;
    result.Medium = TotalAmount % 1000 >= 200 ? (TotalAmount % 1000) / 200 : 0;
    result.Small = (TotalAmount % 1000) % 200 >= 20 ? ((TotalAmount % 1000) % 200) / 20 : 0;
    return result;
}

最後に、Change struct Type の結果が得られます。

于 2011-02-13T07:57:07.827 に答える