写于 2018-11-08 02:05:00| 银河娱乐平台| 技术

让我们通过编程来解决数学问题! “红与白”问题解释

正方形排列在一起

我们假设正方形在任何地方都在左右两侧

所有方块都涂成白色

我用红色画其中一个

之后,根据以下规则,我们将替换正方形的颜色

两秒钟后,所有的左和右隔壁的颜色的方块方块是Shiroaka或红色和白色油漆用红色,涂在所有的方块是不是这种情况(即,左,右旁Shirajira或Akaaka)白色

在那之后,我们将以同样的方式每秒用红色和白色替换正方形

以下显示从初始状态(0秒后)开始的1秒,2秒和3秒后的状态

对于自然数n,我们将F(n)定义为n秒后的红色方块数

例如,F(1)= 2,F(2)= 2,F(3)= 4,F(4)= 2

类似地,F(10)= 4,F(31)= 32,F(1023)= 1024,F(12345)= 64,并使其进行验证

从标准输入给出自然数n(1≤n≤108)

编写一个程序,将F(n)的值输出到标准输出

即使我只查看问题句子,我认为我很难解决问题

让我们尝试实际移动手作为解决方案

让我们在笔记上画一条线,让我们看看红色和白色的变化

它画得太多了吗

让我们试着考虑一下

您可以编写实验代码

我把改变写到12秒之后

我认为你画出它时可以看到模式

这是规则如下

对于整数k,我们称之为Tk,从0秒到2k - 1秒后

然后,通过组合三个Tk-1并进一步用白色质量填充间隙来组成Tk,如下所述

在这篇文章中,我们省略了证明,但是,这种关系已经取得了任何这样的K(总是红色和白色的传统知识的最下方,你可以通过诱导利用的事实证明交替)

那么你如何计算n秒后的红色方块数

为此,让我们考虑“是否图的Tk第m行(除了最好和0线)红色质量是多少

我们称之为Sk(m)

然后,SK(m)为,作为当第m行是在tk的上半部分(第0行,第二2K-1-1行),低半部(2K-1列,第第二2k-当你在第一行时,你会明白你必须划分案件

如果上半部,SK(m)为等于SK-1(M),在下半部的情况下,SK(m)为等于SK-1的2 Tsubun(M-2K-1)

让我们编码上面的递推公式

使用适当大小的k(k变为n <2 k)重复应用递推公式作为初始值

使用递归可以很容易地编写

代码示例如下(C ++)

#包括使用命名空间std; INT S(INT K,INT米){如果(K == 0)返回1;如果(M <(1N ;. //Ñ<确定最小k以2 ^ k是同时(p