角谷猜想(Collatz conjecture)验证算法C#实现
角谷猜想
任何一个大于一的自然数,如果是奇数,则乘以三再加一;如果是偶数,则除以二;得出的结果继续按照前面的规则进行运算,最后必定得到一。 该猜想由日本数学家角谷静夫发现,又被称为考拉兹猜想,3n+1猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想。
C#验证
该验证算法用C#控制台程序实现,输入为任意大于1的正整数,输出为按规则每一步得到的数,到1结束。代码如下:
namespace CollatzConjecture
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入一个大于1的正整数!");
string aStrInput = Console.ReadLine();
int aIntInput;
bool aAgain=true;
while (aAgain)
{
while (!int.TryParse(aStrInput, out aIntInput) || aIntInput <= 1)
{
Console.WriteLine("请输入一个大于1的正整数!");
aStrInput = Console.ReadLine();
}
int aIntOutput = aIntInput;
while (aIntOutput != 1)
{
if (aIntOutput % 2 == 0)
{
aIntOutput /= 2;
}
else
{
aIntOutput = aIntOutput * 3 + 1;
}
Console.WriteLine(aIntOutput.ToString());
}
Console.WriteLine("按数字0退出系统,按数字1重试");
aStrInput = Console.ReadLine();
while(!int.TryParse(aStrInput, out aIntInput)||(aIntInput!=0&&aIntInput!=1))
{
Console.WriteLine("请输入正确的命令!");
aStrInput = Console.ReadLine();
}
aAgain = aIntInput == 0 ? false : true;
}
}
}
}
后记
通过这个简单的例子,我发现经常自己动手写一些这样的小算法、小程序,对提高自己的逻辑思维及严谨性还是有帮助的。以后要找一些更复杂的例子多练习,加油!
下一篇:
迭代器模式(Iterator)
