找出模式中的下一个数字

时间:2013-02-22 01:00:13

标签: c# design-patterns math

我如何在C#中以编程方式找出下一个数字? 例如,如果我有一个模式(3,6,9,12),我将如何以编程方式确定下一个数字是15,然后是21,依此类推? 感谢。

2 个答案:

答案 0 :(得分:2)

嗯,首先你需要知道模式的类型或以编程方式计算出来。线性数字模式通过加法或减法增加。指数模式通过乘法或除法而增加。有了这个,你必须从第一个数字开始并确定差异。然后查看下一个数字,看看它是否增加了相同的数量。如果是这样,您就拥有了模式,只需将差异添加到最后一个数字即可。如果不是,它是一个指数函数,然后你需要确定它随着模式中的每个数字增加多少,以投射下一个。

没有看到代码,我只能告诉你这个概念。希望能帮助到你! 您可能会发现this有用。

答案 1 :(得分:2)

Dangit,我的回答因无线故障而丢失。勒米再试一次:

您可以通过广泛优先搜索来自RPN语言的组合来执行此操作。从堆栈上的模式开始;忽略堆栈下溢,因为它们表明你在序列种子。使用基本运算符和单个数字,在表达能力之间取得良好平衡,而不会过多地扩大搜索空间。例如(显然,在搜索空间中只显示一些有趣的点):

for +:
3 +: Stack Underflow - ignore
3 6 +: 9
3 6 9 +: 15 - wrong

for *:
3 *: SU
3 6 *: 18 - wrong

for 1:
3 1: 1 - wrong

for + -:
3 + -: SU
3 6 + -: SU
3 6 9 + -: -12 - wrong

for 3 +:
3 3 +: 6
3 6 3 +: 9
3 6 9 3 +: 12
success
next:
3 6 9 12 3 +: 15
3 6 9 12 15 3 +: 18

这将为序列产生最简单的解释。正如塞缪尔·埃德温·沃德(Samuel Edwin Ward)所指出的那样,就我们所知,可能有一个复杂的算法可以产生4作为下一个项目,或“香蕉”。例如,这里的许多人会立即“知道”这个序列中的下一个词:

1
2
"fizz"
4
?

(答案是,“很明显”,"buzz",即使模式实际上没有在示例中证明,只有我们的经验。)

编辑:堆栈下溢,而不是溢出:/