题解

51 条题解

  • 0
    @ 2008-10-25 13:38:45

    total := trunc((n + 1) * v);

    这样就过了

    但是total := Round(n*v);

    就只有88 不知道为什么啊

    感觉模拟前几个数都是对的

  • 0
    @ 2008-10-19 19:04:04

    .......................

    99....

  • 0
    @ 2008-10-15 22:11:43

    ORZ wly888_1214 大牛

  • 0
    @ 2008-09-24 19:39:32

    Orz wly888大牛

  • 0
    @ 2008-09-09 14:50:43

    神奇的黄金分割,我是看不出来

  • 0
    @ 2008-08-28 19:58:22

    谁出的这个题?我只能说这个人把Fibonacci数列藏得太好了,天衣无缝。

    我的办法比楼下大牛们的方法麻烦10^N^N^N^N倍,我不是大牛,没有那么敏锐的洞察力,根本没往黄金分割上想,然而楼下这么多同志们非得要个证明,我自以为我的办法还是说得通的。

    拿到这个题时,还是下意识的找规律,从1开始往后写:

    G(1)=1 G(2)=1 G(3)=2 G(4)=3 G(5)=3 G(6)=4 G(7)=4 G(8)=5 G(9)=6 G(10)=6 G(11)=7 G(12)=8 G(13)=8 G(14)=9 G(15)=9 G(16)=10 G(17)=11 G(18)=11 G(19)=12 G(20)=12 G(21)=13 G(22)=14 G(23)=14 G(24)=15 G(25)=16 G(26)=16 G(27)=17 G(28)=17 G(29)=18 G(30)=19……

    写到30了,确切的规律还是没有显现,只是有两点:1、自变量总不小于函数值 2、函数值经常出现重复,而且重复的次数从不超过两次,而且随着自变量的增大,重复次数也没有超过两次的趋势。我想,必然是什么束缚住了重复次数。

    转而考虑重复次数,

    函数值的重复次数数列是:

    2 1 2 2 1 2 1 2 2 1 2 2 1 2 1 2 2 1……

    自变量与函数值差值的重复次数,从1开始往后,差值依次是:

    0 1 1 1 2 2 3 3 3 4 4 4 5 5 6 6 6 7 7 8 8 8 9 9 9 10 10 11 11 11……

    貌似还是没有任何规律,下面将上述数列转化成每个差值的重复次数(为方便起见,剔除0):

    3 2 3 3 2 3 2 3 3 2 3……

    莫非这个“3 2 3 3 2”就是循环节?那来的也太唐突了,并且我又往后写了几个,发现,数列实际上是:3 2 3 3 2 3 2 3 3 2 3 3 2 3 2 3 3 2 3 2 3……

    到了后面规律又没了。。。

    转而考虑,为什么这个差值重复次数数列里只有2和3?而且他们的连接方式也很特殊:可以有23、32和33,但却没有22。 而且比较一下这个差值重复次数数列和上面的函数值重复次数数列,发现每一项都固定的相差1。

    回到原递推式上:每一个G(n)都与G(n-1)和G(G(n-1))有关,所以数列前面的取值对后面的取值毫无疑问是有影响的。当自变量增加1,差值也增加1时,函数值是不变的,这就使函数值出现了重复。因此,差值数列的项每往前推进一项,函数值就要重复一次。例如:

    G(4)=3 差1

    G(5)=3 差2

    此时函数值出现重复;



    G(7)=4 差3

    G(8)=5 差3

    G(9)=6 差3

    此时函数值不出现重复;

    同样的,当函数值不变,自变量增加,差值的重复次数便会出现2;当函数值改变,自变量增加,插值的重复次数便会出现3。

    把这二者综合起来,就得到了差值重复数列本身前面对后面的影响,即:

    对于32,后面一定会出现23;

    对于232,后面一定会出现323;

    对于2332,后面一定会出现32323;

    …………

    举个更具体的例子:如果前面的数列是:3 2 3 3 2

    那么它往下扩充应该是:3 2 3 3 2 3 3 2 3 2 3

    依据这个规则,开始扩充如下(依然省去"1",不然有损和谐):

    3

    3 2

    3 2 3

    3 2 3 3 2

    3 2 3 3 2 3 2 3

    3 2 3 3 2 3 2 3 3 2 3 3 2

    3 2 3 3 2 3 2 3 3 2 3 3 2 3 2 3 3 2 3 2 3

    注意看从第4行开始每行比上一行多的部分,发现什么没有?

    每一行的最后都是上一行的最后连接上再上一行的最后(32332实际上是323连上32),这不得不让人想到一个非常类似的数列:Fibonacci,简直太像了……

    这还不算完,再看看每一行多出来的部分的数字的和:2 3 5 8 13 21……

    又是Fibonacci……

    还有,再看看每一行多出来的部分的长度:1 1 2 3 5 8……

    还是Fibonacci……

    这么多Fibonacci都藏在这里面,藏得太深了……

    一切就明了了,差值重复数列的数字和与自变量n有关;差值重复数列的长度与n所对应的差值有关,关系就是Fibonacci,根据这个,把这种关系在程序中还原出来,用自变量n减去对应的差值,就是我们梦寐以求的函数值了!

    我不知道我的解法与大牛们的公式有什么内在联系,与黄金分割有什么内在联系,但可以保证,这种解法一遍AC。

    但由于这个规律找起来很麻烦,所以还原到程序里也很麻烦。所以,建议没耐心者勿用,头脑不清醒者勿用……

    诸位晕了吗?如果没有的话,算我没达到目的…………

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2008-08-27 11:47:56

    F(n)=(1/sqrt(5))×((1+sqrt(5))/2)^n+((1-sqrt(5))/2)^n)

  • 0
    @ 2007-11-13 22:58:03

    哪位大牛提供一下证明???????????????

    小弟不盛感激

  • 0
    @ 2007-11-07 23:06:27

    靠 诸位 AC之后要证明 我无语!

  • 0
    @ 2007-10-12 20:00:25

    有人用正常的方法做出来的吗?

    不用找规律

  • 0
    @ 2007-09-25 23:08:10

    谁给我补补数学啊

    这个0.618...是怎么回事啊?

  • 0
    @ 2007-08-22 20:38:42

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案错误...

     ├ Hint: Hey buddy~~~ ├ 标准行输出

     ├ 错误行输出

    ---|---|---|---|---|---|---|---|-

    Unaccepted 有效得分:99 有效耗时:0ms

    爽!! Hey Buddy!!!!

  • 0
    @ 2007-08-17 15:26:18

    特征方程吧..

  • 0
    @ 2007-08-14 13:44:16

    fibonacci...?!

    怎么看出它和圆环函数的关系的?

  • 0
    @ 2007-08-02 23:09:20

    Program AAA;

    Const

    v = (sqrt(5) - 1) / 2;

    Var

    n, total: qword;

    Begin

    readln(n);

    total := trunc((n + 1) * v);

    writeln(total);

    End.

    为什么啊???

    请大牛证明一下!!

  • 0
    @ 2007-08-02 17:39:13

    哪位大牛给个证明啊!!!

  • 0
    @ 2007-07-26 19:48:02

    program ex1178;

    var n,ans:qword;

    hj:real;

    begin

    readln(n);

    hj:=(sqrt(5)-1)/2;

    ans:=trunc((n+1)*hj);

    writeln(ans);

    end.

    还是不解...

    有大牛讲下吗?

  • 0
    @ 2007-07-18 22:43:33

    黄金比例+Qword

    过了100题庆祝一下!

  • 0
    @ 2007-03-01 21:09:56

    最好用long long和double

  • 0
    @ 2006-11-09 19:58:17

    神奇呀!!!!!!!————————————0。618

信息

ID
1178
难度
6
分类
其他 | 数学 点击显示
标签
递交数
896
已通过
267
通过率
30%
被复制
5
上传者