★★C语言程序阅读求解!!
来源:百度知道 编辑:UC知道 时间:2024/05/17 04:37:28
这是NOIP2005初赛C提高程序阅读第4题,我肯定我是原封不动地搬到这里来,我用devC++和tubo C编译,得到的答案和官方公布的不一样,而且输入官方输入数据没有任何结果!!
#include <stdio.h>
long g(long k)
{
if(k<=1)return k ;
return(2002*g(k-1)+2003*g(k-2))%2005 ;
}
int main()
{
long n ;
scanf("%ld",&n);
printf("%ld\n",g(n));
getch();
return 0 ;
}
输入:2005
输出:31(官方答案,编译得不到这个结果!!)
还有,这题要怎么做??请越详细越好!!!!如果答得好的话,追加20分!!
#include <stdio.h>
long g(long k)
{
if(k<=1)return k ;
return(2002*g(k-1)+2003*g(k-2))%2005 ;
}
int main()
{
long n ;
scanf("%ld",&n);
printf("%ld\n",g(n));
getch();
return 0 ;
}
输入:2005
输出:31(官方答案,编译得不到这个结果!!)
还有,这题要怎么做??请越详细越好!!!!如果答得好的话,追加20分!!
哈哈,有意思,在看,不知道能不能想出来哦,我让我机器运行了一下过了1分钟了,还没有结果呢,看来低归好多哦
当我输入5得时候竟然答案是31
感觉2005 和 5有点联系哦
如果分解一下呢?
2002*G(x)+202*G(x-1)+G(x-1)
顺便说下,我输入了个100计算机得CPU使用已经100%并且感觉有10分钟了结果还没有出来。。。
不是没有结果,是计算机还没有算出来。。。
有发现个问题,输入22就算得很慢了。。。什么原理啊。 。。
哎。。。本人比较笨,等待高手来解答了。。。
越看越觉得想数学题。。。在网吧把我想得先记这里,见谅咯
f(x) = (2002*f(x-1)+2003*f(x-2))%2005
感觉可以简化成f(x)=-3*f(x-1)-2*f(x-2)
long 是无符还是有符
哈哈,我目前想得是利用数学得方法把这个式子简化了一下,数学学得不好,只能到这里了
return (2005-(3*g(k-1)+2*g(k-2))%2005);
这样改一下是不是能算得快点。。。
哈哈,我还是楼上得那位mininoah,说不能再修改答案了,所以又注册了一个,这个题做出来了
首先呢。。。我把那个式子简化了一下,简化成
(2005-3*a-2*b)%2005
这样和那个是一个效果,这个纯属数学问题
然后我门不要用递归,这样计算机吃不消啊,我门作个循环,结果是一样得
程序如下
main()
{
int i,a,b,max;
a=2002;
b=1;
clrscr();
for(i=3;i<=2005;i++)
{
max=(2005-3*a-2*b)%2005;
b=a;
a=m