迪斯蒂法诺位置:★★C语言程序阅读求解!!
来源:百度文库 编辑:高考问答 时间:2024/05/09 12:50:35
#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=max;
}
printf("%d",max);
}
别忘了把分给楼上那位,那个还是我。谢谢了。
ncomeback好强啊。
我把你的程序稍微改了一下,我个人感觉好理解一点吧。
#include "stdio.h"
main()
{
int i,a,b,max;
a=1; //a用来表示递归式中的f(x-1),初始为f(1)=1
b=0; //b用来表示递归式中的f(x-2),初始为f(0)=0
for(i=2;i<=2005;i++)
{
max=(-3*a-2*b)%2005;
b=a;
a=max;
}
printf("%d",(2005+max)%2005);
}
程序我看了
太多低归了,所以计算机算的很慢
最好找到规律,5——>31
可能有联系