我必须像主题公园那样计算一定数量的门票的价格。 门票的价格和金额必须由用户提供,但这不是我的问题。 我的问题是,当用户输入11张门票时,他获得一张免费的第11张门票,但当他进入11张以上时,他仍然需要支付第11张门票。有人可以帮助我吗?
这是我的代码:
static void Main(string[] args)
{
Console.Write("Voer de prijs van de ticket in: ");
int priceTicket = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Eent ticket kost €{0},-\n\n", priceTicket);
Console.Write("Voer in hoeveel tickets u wilt (per 10 1 gratis): ");
int amountTickets = Convert.ToInt32(Console.ReadLine());
int ticketsTotalPrice = amountTickets * priceTicket;
if(ticketsTotalPrice % 11 == 0)
{
ticketsTotalPrice -= priceTicket;
}
string ticketsTotalPriceStr = ticketsTotalPrice.ToString();
Console.WriteLine("\n\nU heeft "+amountTickets +" tickets gekozen, dit kost " +ticketsTotalPriceStr);
}
答案 0 :(得分:1)
ticketsTotaalPrijs % 11 == 0
仅考虑案例,当用户购买11张票的倍数时,即11,22,33 ......
在这些情况下,您只需减少一个票价,因此只需10,21,32 ......
你需要重新考虑这一部分。由于这是一个家庭作业,我不会详细介绍,因为这是你应该试着找到的。
如果我不进一步了解,我会开始列举不同的案例,然后尝试找一个模式。我想它应该是这样的:左转票,正确的支付票:
1→1, 2→2, ... 9-> 9, 10→10, 11-→10,
12> 11, 13-> 12, ... 20→19, 21-→20, 22-→20,
23-> 21, 24-> 22, ... 31-> 29, 32→30, 33-→30,
34-> 31 ...
好吧,Johnny Mopp把它拿走了,整数分裂是关键。每购买11张门票,您将获得1张免费门票。所以免费门票是numberOfTickets / 11
。但是既然你没有给出部分门票,你需要将这个数额减少。整数除法就是这样(至少对于正数,但不想混淆)。
答案 1 :(得分:1)
价格公式为(total- (total/11))*TicketPrice
total/11
是免费门票的数量
(total- (total/11))
是他应该支付的门票数量
(total- (total/11))*TicketPrice
是他应该支付的总价
int total=10
然后应该计算10张票;
int total=11
然后应该计算10张票;
int total=12
然后应该计算11张票;
...
...
int total=21
然后应该计算20张票;
int total=22
然后应该计算20张票;
int total=23
然后应该计算21张票;
答案 2 :(得分:0)
我的问题是,当用户输入11张门票时,他获得一张免费的第11张门票,但当他进入11张以上时,他仍然需要支付第11张门票。
更改它以便仅在有11张票时才应用折扣:
int ticketsTotalPrice = amountTickets * priceTicket;
if (amountTickets == 11) {
ticketsTotalPrice -= priceTicket;
}
<强>替代强>
如果你不是指我认为你的意思,这里有一些替代解决方案。
如果您需要它以便每个第11张票都是免费的,那么您可以这样做:
int ticketsTotalPrice = (amountTickets - amountTickets / 11) * priceTicket;
或者如果你想要它只在门票数可以被11整除时才应用折扣,你可以这样做:
int ticketsTotalPrice = amountTickets * priceTicket;
if (amountTickets % 11 == 0) {
ticketsTotalPrice -= amountTickets / 11 * priceTicket;
}
答案 3 :(得分:0)
我假设我们购买的每10张门票都会获得一张免费门票(根据代码的这一部分:每10免费提供)。因此,如果我们购买10张门票,我们会得到11张。如果我们购买11张,我们会得到12张。如果我们购买20张,我们会得到22张。
这是错误的:
if(ticketsTotalPrice % 11 == 0)
即使我们最大限度地简化这种情况并赠送一张免费的第十一张票,这仍然无效。当我们购买其中的11件时,我们将获得免费机票!
您需要做的是计算客户购买的所有门票的价格,然后检查他购买的十张门票(没有剩余的)的倍数。然后从总数中减去正确的金额。这样,当他购买44张门票时,他将支付44 - 4 = 40张门票。
答案 4 :(得分:0)
当用户输入11张门票时,他获得一张免费的第11张门票,
最好为每张10张门票提供1张免费门票。因此,如果用户输入10将获得11.如果输入11将获得12等...
int freeTickets = amountTickets / 10; //<< will give 1 free ticket for each 10 tickets
int ticketsTotalPrice = (amountTickets + freeTickets) * priceTicket;
如果您想为每个11
提供免费门票,可以将门票数量除以11
。
答案 5 :(得分:0)
易于遍历每个:
static void Main(string[] args)
{
Console.Write("Voer de prijs van de ticket in: ");
int priceTicket = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Eent ticket kost €{0},-\n\n", priceTicket);
Console.Write("Voer in hoeveel tickets u wilt (per 10 1 gratis): ");
int amountTickets = Convert.ToInt32(Console.ReadLine());
int ticketsTotalPrice = 0; //amountTickets * priceTicket;
//if(ticketsTotalPrice % 11 == 0)
//{
// ticketsTotalPrice -= priceTicket;
//}
for(int i = 1; i <= amountTickets; i++)
{
if(i % 11 != 0)
{
ticketsTotalPrice += priceTicket;
}
}
string ticketsTotalPriceStr = ticketsTotalPrice.ToString();
Console.WriteLine("\n\nU heeft "+amountTickets +" tickets gekozen, dit kost " +ticketsTotalPriceStr);
}