打印副本的C#程序

打印副本的C#程序,c#,C#,我的程序是在第一次复印100份文件时,每打印一份就收取2美元。如果用户打印出的副本超过1份,则对于超过1份的副本,每一份需要1美元(因此,如果我想打印出101份,价格应为200+1,第101份1美元,前100份各2美元)。这是我的密码: int CopyCost = 2; int ammountOfCopies; int discount = 1; Console.WriteLine("How many copies would you like?

我的程序是在第一次复印100份文件时,每打印一份就收取2美元。如果用户打印出的副本超过1份,则对于超过1份的副本,每一份需要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();
int CopyCost=2;
国际货币基金组织;
整数折扣=1;
Console.WriteLine(“您想要多少份?:”;
ammontofcopies=int.Parse(Console.ReadLine());
for(int i=0;i100)
复制成本=2-折扣;
其他的
复制成本=2;
CopyCost*=版权费;
}
WriteLine(“副本的总成本为:{0}”,CopyCost);
Console.ReadLine();

但我的问题是,如果我选择写101份,它会将每份折价为1美元,而不仅仅是100份以上的。这与其说是编码问题,不如说是一个数学问题。你需要取100份或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);

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

if (numberOfCopies > 100)
{
    CopyCost = 200 + (numberOfCopies - 100);
}
else
{
    CopyCost = 2 * numberOfCopies;
}
最好使用以下代码:

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

或者,如果您更喜欢单衬里:

price = (copies * 2) - Math.Max(copies - 100, 0);

对于此问题,您不需要使用
for
循环。。。