【问题标题】:C# loop positive and negative numbersC#循环正负数
【发布时间】:2014-02-04 16:19:21
【问题描述】:

我需要一个简单的 C# 程序的帮助。简单但我不知道解决方案。问题就在这里:我需要按以下顺序循环(或在屏幕上打印)所有数字:2、-3、4、-5、6、-7 等,直到它们达到 100。 你有什么想法吗?现在我已经做了类似的事情:

for (int i = -2; i <= 100; i += 1)
        {
            Console.WriteLine(i);
        }

但我无法让它按我想要的顺序工作,我知道我在 i += 1 部分做错了,但我不知道该怎么做!感谢您的支持。

【问题讨论】:

  • 听起来像是功课。
  • 想一想。这真的非常简单。
  • 无代码解决方案:不要从 -2 计数到 100,而是从 2 计数到 100,并在每次迭代时更改您打印到控制台的符号。
  • 我不会说i += 1 有什么问题(尽管它可以等效地写成i++)。但是,请注意您不需要准确地打印i 的值;您可以使用i 进行计数并打印基于i 计算的内容。

标签: c# loops numbers


【解决方案1】:

您可以在奇数上使用-1,因此请使用% operator

for (int i = 2; i <= 100; i++)
{
    int val = i % 2 == 1 ? i * -1 : i;
    Console.WriteLine(val);
}

Demo

【讨论】:

  • 非常感谢!它奏效了,而且非常简单。再次感谢。
【解决方案2】:
for(int i=2;i<=100;++i){
    Console.WriteLine(i % 2 == 1 ? -i : i);
}

【讨论】:

    【解决方案3】:

    如果我们使用modulo就很简单

    这些步骤直接失败。如果我们注意到它与打印 2-100 的解决方案相同,但有一点点扭曲,对于奇数位,数字 i 应该是他的负号。所以解决方法是一样的。

    步骤:

    1. 循环 i 到 100
    2. 对于每次迭代,我们将决定它是奇数还是偶数。
    3. 如果i 是偶数,则将其乘以 1,当然会得到 i
      否则,这意味着它是奇数,因此会导致 乘以 -1,得到minus i

    代码

    for (int i = 2; i <= 100; i++)
    {
        Console.WriteLine(i * (i%2 == 0 ? 1 : -1));
    }
    

    【讨论】:

    • @AndyG,我认为这个问题没有什么过分的:)
    • 我想说条件更清楚。理解它所需的所有信息都在循环中,因此您不必跟踪循环或对标志进行推断。
    • 作为参考,也可以说Console.WriteLine(i%2==0 ? i : -i);
    • @cHao,确实,我想改进它,但是我看到 BLUEPIXY 在他的解决方案中使用了它,所以我选择不编辑我的,否则它不公平,而且它对笔者看到了很多解决方案。但是是的,我更喜欢那个:)
    • @AndyG,对不起,我错了,这个解决方案有一个 overkill。我刚刚看到了 Sergey Berezovskiy 的解决方案。作者在这个循环中遇到了困难,他给了他LINQ
    【解决方案4】:

    你应该从 2 一个一个地迭代到 100 (是的,都是正值) 然后在循环体中,您应该在每次迭代时反转符号(通过乘以“-1”)并在屏幕上打印结果。

    【讨论】:

      【解决方案5】:

      使用按位和找出奇数:

      for (int i = 2; i <= 100; i += 1)
      {
        int toPrint = i
      
        if((i & 1)==1)
        {
          // It's odd
          toPrint = -toPrint;
        }
      
        Console.WriteLine(toPrint);
      }
      

      【讨论】:

        【解决方案6】:
            static void Main(string[] args)
            {
               for (int i = 2; i <= 100; i++)
                {
                    if (i % 2 == 1)
                    {
                        int j = -i;
                        Console.WriteLine(j);
                    }
                    else
                    Console.WriteLine(i);
                }
                Console.ReadLine();
            }
        

        【讨论】:

          【解决方案7】:

          我们都在学校完成这项任务:

          Enumerable.Range(2, Int32.MaxValue - 1)
                    .TakeWhile(i => i <= 100)
                    .Select(i => i % 2 == 0 ? i : -i)
                    .ToList()
                    .ForEach(Console.WriteLine);
          

          【讨论】:

          • 为什么是.TakeWhile,而不是仅仅说Enumerable.Range(2, 100 - 1)
          • @cHao 在之前的编辑中是Enumerable.Range(2, 100 - 1),但后来我决定让它不太适合家庭作业
          猜你喜欢
          • 2021-03-21
          • 2021-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多