Java 中的 3N+1 问题17 Mar 2025 | 4 分钟阅读 3N+1 问题是一个抽象的数学问题,它是一个猜想(尚未被证明)。它也被称为考拉兹猜想 (Collatz problem)。在本节中,我们将讨论 3N+1 问题及其 Java 程序。 任务是编写一个 Java 程序,该程序将从用户那里读取一个正整数,并从该整数开始打印 3N+1 序列。程序还应该计算并打印序列中的项数。 寻找 3N+1 序列给定一个正整数 N,从 N 开始定义的 3N+1 序列如下:
在数学上,我们可以将 3N+1 问题定义如下: ![]() 让我们通过一个例子来理解问题陈述。 假设 N = 3,这是一个奇数。根据上述规则,将 N 乘以 3 并加 1,我们得到 N = 3*3+1 = 10。因此,N 变成了一个偶数。现在,将 N 除以 2。得到 N = 10/2 = 5。继续这个过程,直到 N 等于 1。因此,3N+1 序列将是 3, 10, 5, 16, 8, 4, 2, 1。 3N+1 问题算法为了计算下一个项,程序必须根据 N 是 偶数 还是 奇数 来采取不同的操作。为此,我们需要一个 if 语句来判断 N 是偶数还是奇数。 剩下的一个问题是计数。计数意味着我们从零开始,每当我们有什么东西需要计数时,我们就加 1。我们需要一个变量(例如 count)来进行计数。 我们仍然需要考虑第一步。如何从用户那里获取一个正整数?如果我们只是读取一个数字,用户可能会输入一个负数或零。如果我们观察 N 为负数或零时会发生什么,我们会发现程序将永远运行下去,因为 N 的值永远不会变成 1,这是不兼容的。 在这种情况下,问题可能不大,但总的来说,我们应该尽量编写防错程序。一种解决方法是持续读取数字,直到用户输入一个正数为止。 第一个 while 循环将在 N 是正数时结束,正如要求的那样。如果 N 不是正数,则要求用户输入另一个值。如果用户输入的第二个数字也是非正数,则会出现问题。if 语句只执行一次,因此第二个输入数字从未被测试。 使用 while 循环,在输入第二个数字后,计算机将跳回到循环的开头,并测试第二个数字是否为正数。如果不是,它将要求用户输入第三个数字,并且将继续要求输入数字,直到用户输入可接受的输入为止。 让我们在 Java 程序中实现上述算法。 3n+1 问题 Java 程序ThreeNPlusOneProblem.java 输出 ![]() 下一个主题Java 程序查找数组中的局部最小值 |
泛型 Comparator 是一个 Java 接口类型,它允许用户比较相同类型的两个对象。它在 `java.util` 包中实现,并且是集合框架的一部分。泛型 Comparator 接口允许用户为对象定义自己的比较逻辑……
5 分钟阅读
java.nio.CharBuffer 类有一个 clear() 函数来清空缓冲区。在清除此缓冲区时进行的修改如下:位置为零。当限制设置为容量时,标记将被丢弃。语法:public final DoubleBuffer clear() ...
阅读 3 分钟
在本节中,我们将学习什么是 xylem(木质部)和 phloem(韧皮部)数,并创建 Java 程序来检查给定的数字是 xylem 还是 phloem。xylem 和 phloem 数的程序经常出现在 Java 编码测试和学术界。Xylem 和 Phloem 数 一个数字 N...
阅读 2 分钟
? 从当前日期计算周数是各种 Java 应用程序中的常见要求。周数计算在调度、时间跟踪、工资管理以及许多其他场景中非常有用。Java 提供了多种方法来从当前日期计算周数,使用内置的...
阅读 4 分钟
给定一个二叉树。我们的任务是找到给定二叉树的最大独立集的尺寸。二叉树的独立集只包含二叉树中未直接连接的节点...
阅读 4 分钟
Java 中的构造函数是一段类似于方法的代码。它在创建类实例时被调用。调用构造函数时,会为对象分配内存。它是一种特殊的类型的方法,用于初始化...
阅读 6 分钟
在 Java 中,原始数据类型是预定义的,并被指定为保留关键字。它不与其他原始值共享状态。 Java 支持以下八种原始数据类型。要了解更多关于 Java 中的数据类型,请参阅 boolean byte int long float double char short 1) boolean 数据类型 A boolean 数据类型可以有两种类型...
7 分钟阅读
在 Java 中,Guava 的 Sets.intersection() 方法返回一个不可修改的视图,表示提供的两个集合的交集。所有存在于两个集合中的元素或值都将被返回。返回集合和第一个集合的迭代顺序将相似。语法:public...
阅读 2 分钟
字符串反转是一个常见的编程问题,其中需要反转给定的字符串,使得字符串的最后一个字符变成第一个字符,反之亦然。然而,在保留空格的情况下,空格的顺序应该在...中得到维护。
阅读9分钟
Java 多线程是一项基本功能,它允许开发人员编写可以并发运行在多个线程上的程序。它有助于开发人员创建响应迅速的应用程序并提高软件性能。关于这个主题已经写了很多书,提供了多线程的深入知识...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India