Хорошая реализация калькулятора изменений в C # - PullRequest
0 голосов
/ 13 февраля 2011

Учитывая количество в мл и 3 размера упаковок (20 мл, 200 мл и 1000 мл), я бы хотел подсчитать, сколько из каждой упаковки необходимо для выполнения общей суммы.*

Это похоже на калькулятор изменений, и я ищу правильный способ сделать это.

Вот моя попытка

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;
            }
        }
    }
}

Это хороший способ сделать это или вы бы порекомендовали что-то другое?

Ответы [ 2 ]

1 голос
/ 13 февраля 2011

Примерно так:

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));
0 голосов
/ 13 февраля 2011

Вы можете создать такую ​​функцию:

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;
}

В конце у вас будет результат изменения типа структуры.

...