如何根据我的新int值进行计数?

时间:2015-09-08 17:44:49

标签: c# types count int

我必须像主题公园那样计算一定数量的门票的价格。 门票的价格和金额必须由用户提供,但这不是我的问题。 我的问题是,当用户输入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);
}

6 个答案:

答案 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);
}