| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2049 人关注过本帖
标题:[求助]怎样才能把我程序的时间复杂度降低点啊
取消只看楼主 加入收藏
krasewallet
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-5-23
收藏
 问题点数:0 回复次数:2 
[求助]怎样才能把我程序的时间复杂度降低点啊
我在做acm的是有这样个题
给定f1=1,f2=1,f(n)=a*f(n-1)+b*f(n-2),要求输入a,b,n遇到0 0 0是结束并输出结果1<=a,b<=1000;1<=n<=100,000,000
比如输入
1 1 3
1 2 10
0 0 0
则输出
2
5
要求运行时间是1000ms但是我的程序是1015ms
大家帮帮忙看看能不能帮我减少点运行时间啊
或者帮帮忙写个简单点的程序啊
我感觉我写的太长了
搜索更多相关主题的帖子: 时间 acm 输出 
2006-05-24 14:30
krasewallet
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-5-23
收藏
得分:0 
#include <stdio.h>
#include <malloc.h>
int cal(int a,int b,long n);/*计算f(n)的值*/
main(){
/*初始化数值,建立链表*/
struct result{
int result;
struct result *next;
};
int a=1;
int b=1;
int c=0;
long n=0;
int i=0;
struct result *p1,*p2,*p;
p=p1=p2=(struct result*)malloc(sizeof(struct result));
scanf("%d%d%ld",&a,&b,&n);
if(a<1||a>1000||b<1||b>1000||n<1||n>100000000)
exit(0);
if(a==0&&b==0&&n==0)
exit(0);
else
p1->result=cal(a,b,n);
/*用链表存放每行数据得出的结果*/
while(a!=0||b!=0||n!=0){
c++;
if(c==1) p=p1;
else p2->next=p1;
p2=p1;
p1=(struct result*)malloc(sizeof(struct result));
scanf("%d%d%ld",&a,&b,&n);
if(a<1||a>1000||b<1||b>1000||n<1||n>100000000)
exit(0);
p1->result=cal(a,b,n);
}
/*输出链表*/
for(i=0;i<c;i++){
printf("%d\n",p->result);
p=p->next;
}
}
/*计算f(n)的值*/
int cal(int a,int b,long n){
int f;
if(n==1)
f=1;
if(n==2)
f=1;
if(n>=3)
f=(a*cal(a,b,n-1)+b*cal(a,b,n-2))%7;
return f;
}

我是只小鸟,但是我想长大
2006-05-24 14:30
krasewallet
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-5-23
收藏
得分:0 

我在做acm的时候编译器告诉我的啊
那个确实是f(n)=(a*f(n-1)+b*f(n-2))%7
笔误啊不好意思


我是只小鸟,但是我想长大
2006-05-24 22:16
快速回复:[求助]怎样才能把我程序的时间复杂度降低点啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025519 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved