我一直试图将其实现为for循环。我写了一个这个程序的流程图。该程序需要重复,直到n = 1.我已经包含了一个指向我的流程图的链接。如果有人可以帮助我,那将是非常棒的。
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();
}
}
}
答案 0 :(得分:1)
如果你必须使用for
,请按照以下描述直截了当地说明:
n == 1
3 * n + 1
或n / 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();
}