问题标签 [palindrome]
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.
c - 求两个三位数乘积的最大回文问题
因此,在 Project Euler 中,问题 4陈述如下:
回文数的两种读法都是一样的。由两个 2 位数字的乘积构成的最大回文数是 9009 = 91 99。
找出由两个 3 位数字的乘积构成的最大回文数。
我尝试了以下方法:
但是,这不起作用。我得到的不是正确答案,而是 580085,我猜这至少是回文,但仍然不是正确答案。
让我从以下开始解释我的程序int main
:
int i
并且int g
是我的乘数。他们就是那两个三位数。int final
是将存储最大回文的数字。- 我开始两个 for 循环,以获取每个数字的可能性。
- 当达到第一个回文时,我使用 goto 退出循环(可能不应该,但它不会对像这样的小程序产生太大影响)。
- 第一个回文应该是最大的回文,因为我从顶部倒数。
现在让我解释一下我的支票:
- 首先,因为这两个三位数相乘以确定一个字符需要保持该值的大小,所以我去计算器并乘以 999 * 999,结果是 6,然后我需要加一个,因为我发现从我之前发布的一个问题中,
sprintf
将一个\0
角色放在最后。 - 好的,现在我有了一个 char 和所有内容,我复制了
result
(其中i*g
inint main
)并将其放入char b[7]
. - 然后我只是
b
通过硬编码我需要检查的每个插槽来检查它是否等于它自己。 - 然后我相应地返回,1 为真,2 为假。
这对我来说似乎完全合乎逻辑,但是由于某些奇怪的原因它不起作用。有什么提示吗?
java - 你如何确定一个字符串是否是回文?
你如何测试给定的字符串是否是 Java 中的回文,而不使用任何为我做这一切的方法?
ruby - 对回文产品问题感到困惑
我一直在学习 Ruby,所以我想我会尝试一些项目 Euler 谜题。尴尬的是,我只做了第4题……
问题4如下:
回文数的两种读法都是一样的。由两个 2 位数字的乘积构成的最大回文数是 9009 = 91 × 99。
找出由两个 3 位数字的乘积构成的最大回文数。
所以我想我会在嵌套的 for 循环中从 999 循环到 100 并对回文进行测试,然后当我找到第一个循环(应该是最大的循环)时跳出循环:
这确实输出了一个回文 580085,但显然这不是该范围内两个三位数的最高乘积。奇怪的是,如果我将范围更改为 10...100,则相同的代码成功返回 9009,就像在示例中一样。
- 有人可以告诉我哪里出错了吗?
- 另外,有没有更好的方法来打破内部循环?
谢谢
c - 在c中检查回文字符串
我接受一个字符串作为命令行参数。我想检查输入的字符串是否是回文并打印结果。我已经编写了以下代码。但它显示所有输入的结果“不是回文”。
java - 这个 Java 正则表达式如何检测回文?
这是一系列教育正则表达式文章的第三部分。它遵循这个正则表达式如何找到三角数?(首先介绍了嵌套引用)以及我们如何将 a^nb^n 与 Java 正则表达式匹配? (其中进一步阐述了前瞻“计数”机制)。这部分介绍了一种特定形式的嵌套断言,当它与嵌套引用结合使用时,Java 正则表达式可以匹配大多数人认为“不可能”的东西:回文!
回文的语言是非常规的;它实际上是无上下文的(对于给定的字母表)。也就是说,现代正则表达式实现不仅仅识别常规语言,Perl/PCRE 的递归模式和 .NET 的平衡组可以轻松识别回文(请参阅:相关问题)。
但是,Java 的正则表达式引擎不支持这些“高级”功能。然而,“某人” (*wink*)设法编写了以下正则表达式,似乎可以很好地完成这项工作(另见 ideone.com):
所以这似乎有效,但如何?
参考
常识警报!!!
这不是检测回文的最佳方法;
O(N^3)
充其量是。用更通用的编程语言执行这种检测既更有效也更直接。您不想使用正则表达式来检测回文,原因与您不想使用正则表达式查找素数的原因相同。也就是说,您将研究非递归非平衡组正则表达式如何检测回文,原因与您研究正则表达式如何用于素数测试的原因相同:这很有趣,很有挑战性,很有教育意义。
相关问题
- 如何使用正则表达式检查字符串是否为回文?- 不可能”!(除非...)
- 如何检查给定的字符串是否是回文?- 多种语言的非正则表达式解决方案
- 如何确定一个数字是否是正则表达式的素数?
regex - 为什么这个递归正则表达式只在一个字符重复 2^n - 1 次时才匹配?
在阅读了polygenelubricants关于高级正则表达式技术的系列文章(特别是这个 Java 正则表达式如何检测回文?)后,我决定尝试使用递归(在 PHP 中)创建自己的 PCRE 正则表达式来解析回文。
我想出的是:
我对这个表达式的理解是它应该匹配零个或一个字符(每个少于 2 个字符的字符串都是隐含的回文,以及在递归中考虑具有奇数长度的回文),或者两个相同的字符分开通过模式的递归。
不幸的是,正如您在www.ideone.com/a9T3F中看到的那样,它似乎并没有那样工作。相反,只有 2 n - 1 个(即空字符串、a
、aaa
、aaaaaaa
、a 15)重复字符的字符串与正则表达式匹配。
奇怪的是,如果我修改我的模式以使递归是可选的(即^(([a-z])(?1)?\2|[a-z]?)$
,请参阅www.ideone.com/D6lJR,它只匹配具有重复 2 n次字符的字符串(即空字符串、a
、aa
、aaaa
、aaaaaaaa
、a 16) .
为什么我的正则表达式没有按我期望的方式工作?
对于那些渴望建议不要使用正则表达式的人的注意事项:
这个问题的重点是学习如何正确使用递归正则表达式。我知道这不是确定字符串是否为回文的有效方法,如果出于某种原因必须确定生产代码中的回文,我不会使用递归正则表达式;我只是有兴趣了解更多关于正则表达式的高级方面。
php - 这种 PCRE 模式如何检测回文?
这个问题是关于在 PCRE 模式中使用前瞻、嵌套引用和条件来匹配所有回文的教育演示,包括那些不能被 PCRE 手册页中给出的递归模式匹配的回文。
在 PHP 片段中检查这个 PCRE 模式:
这种模式似乎可以检测回文,如本测试用例所示(另见 ideone.com):
那么这种模式是如何工作的呢?
笔记
此模式使用嵌套引用,这与此 Java 正则表达式如何检测回文?,但与 Java 模式不同的是,它没有后视(但它确实使用了条件)。
另外,请注意 PCRE手册页提供了一个递归模式来匹配一些回文:
手册页警告说这种递归模式不能检测所有回文(参见:Why will this recursive regex only match when a character repeats 2 n - 1 times? and also on ideone.com),但嵌套的参考/正向前瞻模式呈现在这个问题上可以。
r - R中的反转数字
如何在 R 中反转一串数字?
例如,我有一个大约 1000 个六位数字的向量,我想知道它们是否是回文。我想创建一个完全相反的第二组,所以我可以进行对决。
objective-c - 奇怪的可可虫?
嘿伙计们,下面是我用于学校作业的一段代码。每当我输入一个带有 O 的单词(大写的 o)时,它就会失败!每当这个程序中有一个或多个大写 O 时,它会返回 false 并记录:句子不是回文。
回文,对于不知道回文是什么的人来说,是一个从左到右,从左到右读相同的词。(例如大声笑、皮划艇、复兴者等)我在尝试检查“最古老”的回文时发现了这个错误:SATOR AREPO TENET OPERA ROTAS。
当我将所有大写的 o 更改为小写的 o 时,它会起作用并返回 true。让我清楚地说明,这段代码所有带有大写 O 的句子/单词都返回 false。一个大写的 o 就足以使这个程序失败。
那么,这是 Cocoa 中的一些奇怪的错误吗?还是我错过了什么?
- 乙
c - C中没有指针和递归的回文
我正在尝试确定一个短语是否是回文(从左到右相同的单词),但我无法使其工作。怎么了?,我不能使用指针或递归或字符串类型变量