问题标签 [collatz]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1535 浏览

scheme - 你知道如何编写这个 Scheme 函数吗?

你能写一个接受一个参数(一个正整数)的函数吗?

  • 如果是偶数,则将其除以二,或
  • 将其乘以三,如果是奇数则加一

然后返回结果数字。

然后是一个单独的函数,它接受一个参数(一个正整数)并反复将其传递给前一个函数,直到它达到 1(此时它停止)。该函数将返回将其减少到 1 所需的步数。

然后是另一个函数,它接受两个参数 a 和 b(都是 a <= b 的正整数)并返回将范围内的任何单个数字减少到 1(包括端点)所需的最大重复 Collat​​z 步骤数。(Collat​​z 步骤参考前面的函数)。

最后,另一个函数接受两个参数 a 和 b(都是 a <= b 的正整数)并返回 a 和 b 之间的数字(包括端点),该数字需要最大的 Collat​​z 步数减少到 1。

这些函数与 Collat​​z 问题有关,我觉得很有趣。后续函数显然会借用之前定义的其他函数。

知道我们如何在 Scheme 代码中显示这一点吗?

0 投票
8 回答
3978 浏览

java - Project Euler (P14):递归问题

嗨,我正在做 Euler 项目中的 Collat​​z 序列问题(问题 14)。我的代码适用于低于 100000 的数字,但如果数字更大,则会出现堆栈溢出错误。

有没有办法可以重构代码以使用尾递归,或防止堆栈溢出。代码如下:

0 投票
8 回答
5694 浏览

java - Uva的3n+1问题

我正在解决 Uva 的 3n+1 问题,但我不明白为什么法官拒绝我的回答。没有超过时间限制,到目前为止我尝试过的所有测试用例都运行正常。

0 投票
70 回答
11468 浏览

language-agnostic - 代码高尔夫:科拉茨猜想

http://xkcd.com/710/的启发,这里有一个代码高尔夫。

挑战

给定一个大于 0 的正整数,打印出该数字的冰雹序列。

冰雹序列

有关更多详细信息,请参见维基百科

  • 如果是偶数,则除以二。
  • 如果数字是奇数,则将其增加三倍并加一。

对产生的数字重复此操作,直到它达到 1。(如果它在 1 之后继续,它将进入无限循环1 -> 4 -> 2 -> 1...

有时代码是最好的解释方式,所以这里有一些来自维基百科

这段代码有效,但我增加了一个额外的挑战。程序不能容易受到堆栈溢出的影响。所以它必须要么使用迭代,要么使用尾递归。

此外,如果它可以计算大数字并且该语言尚未实现它,则可以加分。(或者如果您使用固定长度整数重新实现大数字支持)

测试用例

此外,代码 Golf 必须包含完整的用户输入和输出。

0 投票
8 回答
325 浏览

java - 为什么这个循环不终止?

这是示例代码:

这工作得很好,直到它下降到 2。然后它2 4 2 4 2 4 2 4 2 4无限输出。在我看来,如果将 2 输入为 n,(n % 2 == 0)则为真 2 将除以 2 得到 1。然后将打印 1,因为(n != 1)为假,循环将终止。

为什么这不会发生?

0 投票
8 回答
17004 浏览

c - 欧拉计划问题 14(Collat​​z 问题)

为正整数集定义了以下迭代序列:

n ->n/2(n 为偶数) n ->3n + 1(n 为奇数)

使用上面的规则并从 13 开始,我们生成以下序列:

13 40 20 10 5 16 8 4 2 1 可以看出,这个序列(从 13 开始,到 1 结束)包含 10 个术语。尽管尚未证明(科拉茨问题),但人们认为所有起始数字都以 1 结束。

哪个起始数字(低于 100 万)产生最长的链?

注意:一旦链启动,条款允许超过一百万。

我尝试使用蛮力方法在 C 中编写解决方案。但是,我的程序在尝试计算 113383 时似乎停止了。请指教 :)

0 投票
3 回答
636 浏览

clojure - 欧拉计划第 14 题“向前看”的惰性序列

我正在尝试以一种懒惰的方式解决Project Euler 问题 14。不幸的是,我可能正在尝试做不可能的事情:创建一个惰性序列,它既是惰性的,又以某种方式“向前看”它尚未计算的值。

我为测试正确性而编写的非懒惰版本是:

哪个有效,但确实很慢。当然,我可以记住:

然而,我真正想做的是为了理解惰性序列的局限性而抓狂,然后编写一个这样的函数:

从中拉取元素将导致 n>2 的堆栈溢出,如果您考虑一下为什么它需要在 n=3 时“展望未来”以了解惰性列表中第十个元素的值,这是可以理解的,因为 (+ 1 (* 3 n)) = 10。

由于惰性列表的开销比记忆小得多,我想知道这种事情是否可以通过更延迟的评估或排队以某种方式实现?

0 投票
3 回答
296 浏览

c - 在c中存储已知序列

我正在用 C 语言处理Project Euler #14并找出了基本算法;然而,对于大数字,它的运行速度慢得令人难以忍受,例如想要的 2,000,000;我推测是因为它必须一遍又一遍地生成序列,即使应该有一种方法来存储已知序列(例如,一旦我们达到 16,我们从以前的经验中知道下一个数字是 8、4、2 ,然后 1)。

我不完全确定如何使用 C 的固定长度数组来做到这一点,但必须有一个好方法(我敢肯定,这非常有效)。提前致谢。

这是我目前拥有的,如果有帮助的话。

0 投票
3 回答
1507 浏览

haskell - Collat​​z 函数中出现错误“No instance for (Num [t])”

我是 Haskell 的新手,一般来说是编程。我正在尝试定义一个从n生成 Collat​​z 数字序列的函数。我有:

当我在 GHCi 中运行它时,我得到了错误:

我不知道这是什么意思。问题似乎是将“1”附加到列表中。出现这个问题是因为

在正确的 Collat​​z 序列之后生成无限的“1”序列;然而,

从n中生成除 "1" 之外的所有 Collat​​z 数。我究竟做错了什么?

0 投票
1 回答
184 浏览

graphing - 图形计算器逻辑测试错误

我尝试制作以下程序,起初它运行良好。

这应该做的是我输入一个起始数字,如果它是偶数,它会Q/2。如果它很奇怪,它会执行3Q+1并将结果存储回Q. 这就是 Collat​​z 猜想,它指出,如果遵循这个迭代,无论你从什么数字开始,它总是会降到 1。一些起始数字需要更多的步骤才能达到,而一些起始数字需要更少的步骤。

问题:

有时程序经过大量迭代后,它会显示 ERROR,当我按下调试时,它会将我的光标移到Q.if Q≠1

你知道为什么会一直这样吗?谢谢。