我需要帮助实现for循环

时间:2017-05-01 18:39:55

标签: c#

我一直试图将其实现为for循环。我写了一个这个程序的流程图。该程序需要重复,直到n = 1.我已经包含了一个指向我的流程图的链接。如果有人可以帮助我,那将是非常棒的。

enter image description here

using System;
namespace collatzconjecture
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine());
            if (n == 1)
            {
                Console.WriteLine("n = {0}", n);


            }
            else if (n % 2 == 0)
            {
                int a = n / 2;
                Console.WriteLine("n = {0}", a);

            }
            else
            {
                int b = 3 * n + 1;
                Console.WriteLine("n = {0}", b);

            }
            Console.ReadKey();

        }
    }
}

2 个答案:

答案 0 :(得分:1)

如果你必须使用for,请按照以下描述直截了当地说明:

  • 以用户输入开始
  • 休息n == 1
  • 下一步是3 * n + 1n / 2

类似的东西:

public static void Main(string[] args) {
  for (int n = Convert.ToInt32(Console.ReadLine()); // start with user input
       n > 1;                                       // safier choice then n != 1
       n = n % 2 == 0 ? n / 2 : 3 * n + 1)          // next step either n/2 or 3*n + 1 
    Console.WriteLine(n);

  Console.ReadKey();
}

但是,如果你可以选择实现,我建议将逻辑放到生成器中:

private static IEnumerable<int> Collatz(int n) {
  while (n > 1) {
    yield return n;

    n = n % 2 == 0
      ? n / 2
      : 3 * n + 1;
  }

  yield return n;
}

和UI

public static void Main(string[] args) {
  int n = Convert.ToInt32(Console.ReadLine());

  Console.Write(string.Join(Environment.NewLine, Collatz(n)));
}

答案 1 :(得分:0)

你真正想要的是一个while循环,一直持续到n为止。

public static void Main(string[] args)
{
    int n = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("n = {0}", n);
    while(n != 1)
    {
        if (n % 2 == 0)
        {
            n = n / 2;
        }
        else
        {
            n = 3 * n + 1;
        }

        Console.WriteLine("n = {0}", a);
    }

    Console.ReadKey();
}