一道有道编程题
来源:互联网 发布:淘宝 胖驴 编辑:程序博客网 时间:2024/05/16 19:06
菲波那切数列可以用下列的式子表示:
f(1)=1
f(2)=1
f(n)=f(n-1)+f(n-2) (n>=3)
现在我们根据这个规则定义另一种数列 命名为"辛波那切数列", 它是这样定义的:
s(x)=0 (x<0)
s(x)=1 (0<=x<1)
s(x)=s(x-1)+s(x-3.14) (x>=1)
现在需要计算出s(x) MOD 1000000007的值。
第一行有一个正整数T表示有T组测试数据。
接下来T行,每行包含一个数x。
其中 T<=10000, -1000.0<=x<=1000.0
有T行,依次输出每组数据的结果。
-1
0.667
3.15
1
2
我的分析
采用简单的递归的方法在做这题时间上肯定会超时,因而只有分析下,有没有其它的办法。
经过分析,看能否转换为fibonacci数的问题:
当x<-[1,3.14)时,s(x)=s(x-1)=...=1,s(x-3.14)=0;--------s(x)=1;
当x<-[3.14,4.14)时,x-1<-[2.14,3.14),s(x-1) = 1,s(x-3.14)=1-------s(x)=2;
当x<-[4.14,5.14)时,x-1<-[3.14,4.14) ,s(x-1) =2 ,x-3.14<-[1,2),s(x-3.14)=1;------s(x)=3;
当x<-[5.14,6.14)时,x-1<-[4.14,5.14),s(x-1)=3,x-3.14<-[2,3),s(x-3.14)=1;---------s(x)=4;
当x<-[6.14,7.14)时,x-1<-[5.14,6.14),s(x-1)=4,x-3.14<-[3,4),...此时s(x-3.14)的值不定,分析就此截止
说明x-1与x-3.14不是正好落在分别前两个区间,故其函数值也不能用前两个区间的函数值之和来计算;美好的想法只能落空。
网友的分析
以下引用http://topic.csdn.net/u/20100524/22/c3ff1e6d-8d2d-42f4-a982-cddf7ab77528.html网友的分析和代码
12楼:danjiewu
条件-1000.0<=x<=1000.0很关键,其实要把3.14当作整数来看待,也就是s(x)=s(x-100)+s(x-314),-100000<=x<=100000,这样就好办了,直接把所有结果都计算出来就可以了。当然还要考虑到精度损失的问题,这个倒卡了好久。
danjiewu的代码:
6楼knate
- 一道有道编程题
- 网易有道第一道编程题
- 一道有道实习生笔试算法题分析
- 有道 值得一道
- 有道 值得一道
- 有道 值得一道
- 有道 值得一道
- 有道 值得一道
- 有道 值得一道
- 有道 值得一道
- 有道 值得一道
- 一道编程题
- 一道编程题
- 一道编程题
- 一道编程题
- 笔试编程题一道
- 一道华为编程题
- 一道编程题
- WPF(三)举例讲解WPF样式
- JSP中实现添加一行,删除一行操作
- C++ 类型转换详解
- tomcat启动报错,不能正常创建连接池
- video4linux(v4l)使用摄像头的实例基础教程与体会
- 一道有道编程题
- ajax 发送xml文件,java接受xml文件并解析
- 分治算法
- Spring编程式事务
- [VC/MFC]滑动动条控件Slider的用法
- 页面编码与调用的js文件编码不同导致乱码的处理
- Eclipse常用插件列表
- 什么叫帅?
- 佛家经典语录