【问题标题】:How to count from my new int value?如何计算我的新 int 值?
【发布时间】:2015-12-04 12:15:48
【问题描述】:

我不得不计算主题公园等一定数量的门票价格。 门票的价格和数量必须由用户给出,但这不是我的问题。 我的问题是,当用户输入 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);
}

【问题讨论】:

  • 那么,如果票数 == 11,用户可以获得免费票吗?或者如果门票 == 11、22、33 等,他将获得 1、2、3 等免费门票?
  • 你能用英文名字吗?我不明白prijsTicketaantalTicketsticketsTotaalPrijs
  • 没错,但我想让代码尽可能紧凑!
  • 非常接近英文;) : price of ticket, number of tickets, tickets total price.
  • 还是编辑了 ;)

标签: c# types count int


【解决方案1】:

当用户输入 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

【讨论】:

    【解决方案2】:

    这种情况下的数学运算比使用循环更直接。我建议查找内联的ticketTotalPrice。

    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 - 
            (amountTickets / 10 * priceTicket);
    
        string ticketsTotalPriceStr = ticketsTotalPrice.ToString();
        Console.WriteLine("\n\nU heeft "+amountTickets +" tickets gekozen, dit kost " +
             ticketsTotalPriceStr);
    }
    

    【讨论】:

      【解决方案3】:

      我的问题是,当用户输入 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;
      }
      

      【讨论】:

        【解决方案4】:

        价格公式为(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 票;

        【讨论】:

        • 你先生,真是个天才;)非常感谢!
        【解决方案5】:

        每个循环都很容易:

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

        【讨论】:

          【解决方案6】:

          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。但是由于您不放弃部分门票,因此您需要将此金额四舍五入。整数除法正是这样做的(至少对于正数,但不想混淆)。

          【讨论】:

          • 是的,我已经在这里坐了好几个小时了。反正我会学的。请举个例子,谢谢。
          【解决方案7】:

          我假设我们每购买 10 张门票就能获得一张免费门票(根据代码的这一部分:per 10 1 gratis)。所以如果我们买 10 张票,我们得到 11 张。如果我们买 11 张,我们得到 12 张。如果我们买 20 张,我们得到 22 张。

          这是错误的:

          if(ticketsTotalPrice % 11 == 0) 
          

          即使我们最大限度地简化这种情况并免费赠送第十一张票,这仍然行不通。购买 11 张即可获得免费门票!

          您需要做的是计算客户购买的所有门票的价格,然后检查他购买了十张门票的倍数(不包括余数)。然后从总数中减去正确的金额。这样,例如,当他购买 44 张门票时,他将支付 44 - 4 = 40 张门票。

          【讨论】:

            猜你喜欢
            • 2022-06-14
            • 2021-10-12
            • 2011-03-04
            • 1970-01-01
            • 2011-10-08
            • 2022-11-29
            • 2022-11-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多