2

我的计划是为复印前 100 篇论文的每份打印副本收取 2 美元。如果用户打印超过一百份,每份超过一百份需要1美元每份(所以如果我想打印101份,价格应该是200+1,第101份1美元前 100 份每份 2 美元)。这是我的代码:

int CopyCost = 2;
        int ammountOfCopies;
        int discount = 1;
        Console.WriteLine("How many copies would you like?: ");
        ammountOfCopies = int.Parse(Console.ReadLine());


        for (int i = 0; i < ammountOfCopies; i++)
        {
        if (ammountOfCopies > 100)
            CopyCost = 2 - discount;
        else
            CopyCost =  2;

        CopyCost *= ammountOfCopies;
        }
        Console.WriteLine("The total cost for your copies is: {0} ", CopyCost);

        Console.ReadLine();

但我遇到的问题是,如果我选择写出 101 份,它会将每份折扣为 1 美元,而不仅仅是 100 份以上的。

4

4 回答 4

8

这更像是一个数学问题,而不是一个编码问题。您需要将副本数量等于或低于 100 并乘以正常价格。然后将超过 100 份的份数乘以折扣价。不需要for循环。

将问题分解为代码中的小块,例如,如下所示:

int price = 2;
int discountedPrice = price - 1;
int amountAtNormalPrice = Math.Min(amountOfCopies, 100);
int amountAtDiscountPrice = Math.Max(amountOfCopies - 100, 0);
int amountTotal = (amountAtNormalPrice * price) + (amountAtDiscountedPrice * discountedPrice);
于 2013-08-15T13:39:49.717 回答
0

更好的是,使用以下代码:

int TotalCost;

if (amountOfCopies > 100)
{
    TotalCost = (amountOfCopies - 100) * (CopyCost - discount) + 100 * CopyCost;
}
else
{
    TotalCost = amountOfCopies * CopyCost;
}

Console.WriteLine("The total cost for your copies is: {0} ", TotalCost);
于 2013-08-15T13:45:29.977 回答
0

或者,如果您更喜欢单线:

price = (copies * 2) - Math.Max(copies - 100, 0);
于 2013-08-15T14:05:18.257 回答
0

您正在遍历每个副本(numberOfCopies,顺便说一句,而不是 amountOfCopies)并每次都应用计算。您应该直接计算;在这种情况下不需要循环:

if (numberOfCopies > 100)
{
    CopyCost = 200 + (numberOfCopies - 100);
}
else
{
    CopyCost = 2 * numberOfCopies;
}
于 2013-08-15T13:40:31.883 回答