问题标签 [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.

0 投票
10 回答
9662 浏览

c - 求两个三位数乘积的最大回文问题

因此,在 Project Euler 中,问题 4陈述如下:

回文数的两种读法都是一样的。由两个 2 位数字的乘积构成的最大回文数是 9009 = 91 99。

找出由两个 3 位数字的乘积构成的最大回文数。

我尝试了以下方法:

但是,这不起作用。我得到的不是正确答案,而是 580085,我猜这至少是回文,但仍然不是正确答案。

让我从以下开始解释我的程序int main

  1. int i并且int g是我的乘数。他们就是那两个三位数。
  2. int final是将存储最大回文的数字。
  3. 我开始两个 for 循环,以获取每个数字的可能性。
  4. 当达到第一个回文时,我使用 goto 退出循环(可能不应该,但它不会对像这样的小程序产生太大影响)。
  5. 第一个回文应该是最大的回文,因为我从顶部倒数。

现在让我解释一下我的支票:

  1. 首先,因为这两个三位数相乘以确定一个字符需要保持该值的大小,所以我去计算器并乘以 999 * 999,结果是 6,然后我需要加一个,因为我发现从我之前发布的一个问题中,sprintf将一个\0角色放在最后。
  2. 好的,现在我有了一个 char 和所有内容,我复制了result(其中i*gin int main)并将其放入char b[7].
  3. 然后我只是b通过硬编码我需要检查的每个插槽来检查它是否等于它自己。
  4. 然后我相应地返回,1 为真,2 为假。

这对我来说似乎完全合乎逻辑,但是由于某些奇怪的原因它不起作用。有什么提示吗?

0 投票
5 回答
8416 浏览

java - 你如何确定一个字符串是否是回文?

你如何测试给定的字符串是否是 Java 中的回文,而不使用任何为我做这一切的方法?

0 投票
13 回答
3215 浏览

ruby - 对回文产品问题感到困惑

我一直在学习 Ruby,所以我想我会尝试一些项目 Euler 谜题。尴尬的是,我只做了第4题……

问题4如下:

回文数的两种读法都是一样的。由两个 2 位数字的乘积构成的最大回文数是 9009 = 91 × 99。

找出由两个 3 位数字的乘积构成的最大回文数。

所以我想我会在嵌套的 for 循环中从 999 循环到 100 并对回文进行测试,然后当我找到第一个循环(应该是最大的循环)时跳出循环:

这确实输出了一个回文 580085,但显然这不是该范围内两个三位数的最高乘积。奇怪的是,如果我将范围更改为 10...100,则相同的代码成功返回 9009,就像在示例中一样。

  • 有人可以告诉我哪里出错了吗?
  • 另外,有没有更好的方法来打破内部循环?

谢谢

0 投票
6 回答
11884 浏览

c - 在c中检查回文字符串

我接受一个字符串作为命令行参数。我想检查输入的字符串是否是回文并打印结果。我已经编写了以下代码。但它显示所有输入的结果“不是回文”。

0 投票
1 回答
6365 浏览

java - 这个 Java 正则表达式如何检测回文?

这是一系列教育正则表达式文章的第三部分。它遵循这个正则表达式如何找到三角数?(首先介绍了嵌套引用)以及我们如何将 a^nb^n 与 Java 正则表达式匹配? (其中进一步阐述了前瞻“计数”机制)。这部分介绍了一种特定形式的嵌套断言,当它与嵌套引用结合使用时,Java 正则表达式可以匹配大多数人认为“不可能”的东西:回文!

回文的语言是非常规的;它实际上是无上下文的(对于给定的字母表)。也就是说,现代正则表达式实现不仅仅识别常规语言,Perl/PCRE 的递归模式和 .NET 的平衡组可以轻松识别回文(请参阅:相关问题)。

但是,Java 的正则表达式引擎不支持这些“高级”功能。然而,“某人” *wink*设法编写了以下正则表达式,似乎可以很好地完成这项工作(另见 ideone.com):

所以这似乎有效,但如何?

参考


常识警报!!!

这不是检测回文的最佳方法;O(N^3)充其量是。用更通用的编程语言执行这种检测既更有效也更直接。

您不想使用正则表达式来检测回文,原因与您不想使用正则表达式查找素数的原因相同。也就是说,您将研究非递归非平衡组正则表达式如何检测回文,原因与您研究正则表达式如何用于素数测试的原因相同:这很有趣,很有挑战性,很有教育意义。

相关问题

0 投票
2 回答
1637 浏览

regex - 为什么这个递归正则表达式只在一个字符重复 2^n - 1 次时才匹配?

在阅读了polygenelubricants关于高级正则表达式技术的系列文章(特别是这个 Java 正则表达式如何检测回文?)后,我决定尝试使用递归(在 PHP 中)创建自己的 PCRE 正则表达式来解析回文。

我想出的是:

我对这个表达式的理解是它应该匹配零个或一个字符(每个少于 2 个字符的字符串都是隐含的回文,以及在递归中考虑具有奇数长度的回文),或者两个相同的字符分开通过模式的递归。

不幸的是,正如您在www.ideone.com/a9T3F中看到的那样,它似乎并没有那样工作。相反,只有 2 n - 1 个(即空字符串、aaaaaaaaaaaa 15)重复字符的字符串与正则表达式匹配。

奇怪的是,如果我修改我的模式以使递归是可选的(即^(([a-z])(?1)?\2|[a-z]?)$,请参阅www.ideone.com/D6lJR,它只匹配具有重复 2 n次字符的字符串(即空字符串、aaaaaaaaaaaaaaaa 16) .

为什么我的正则表达式没有按我期望的方式工作?

对于那些渴望建议不要使用正则表达式的人的注意事项:
这个问题的重点是学习如何正确使用递归正则表达式。我知道这不是确定字符串是否为回文的有效方法,如果出于某种原因必须确定生产代码中的回文,我不会使用递归正则表达式;我只是有兴趣了解更多关于正则表达式的高级方面。

0 投票
2 回答
1559 浏览

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),但嵌套的参考/正向前瞻模式呈现在这个问题上可以。

0 投票
7 回答
4443 浏览

r - R中的反转数字

如何在 R 中反转一串数字?

例如,我有一个大约 1000 个六位数字的向量,我想知道它们是否是回文。我想创建一个完全相反的第二组,所以我可以进行对决。

0 投票
2 回答
767 浏览

objective-c - 奇怪的可可虫?

嘿伙计们,下面是我用于学校作业的一段代码。每当我输入一个带有 O 的单词(大写的 o)时,它就会失败!每当这个程序中有一个或多个大写 O 时,它会返回 false 并记录:句子不是回文。

回文,对于不知道回文是什么的人来说,是一个从左到右,从左到右读相同的词。(例如大声笑、皮划艇、复兴者等)我在尝试检查“最古老”的回文时发现了这个错误:SATOR AREPO TENET OPERA ROTAS。

当我将所有大写的 o 更改为小写的 o 时,它会起作用并返回 true。让我清楚地说明,这段代码所有带有大写 O 的句子/单词都返回 false。一个大写的 o 就足以使这个程序失败。

那么,这是 Cocoa 中的一些奇怪的错误吗?还是我错过了什么?

0 投票
5 回答
1294 浏览

c - C中没有指针和递归的回文

我正在尝试确定一个短语是否是回文(从左到右相同的单词),但我无法使其工作。怎么了?,我不能使用指针或递归或字符串类型变量