标题:这个代码发上去说是输出超出限制怎么办
只看楼主
qiujiao
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2018-10-26
结帖率:0
已结贴  问题点数:20 回复次数:14 
这个代码发上去说是输出超出限制怎么办
#include <stdio.h>
double f(double a,double b){
    double sum=0,c,d;
    c=a;d=b;
    if(a<0){
        sum=a+b;
    }
    if(a==0){
        sum=b-1;
    }
    if(a>0){
        for(int i=1;a-i>=0;i++){
            sum=sum+a/b;
            b=a+b;
            a=a-1;
        }
        sum=a+b;
    }
    return sum;
}
int main(){
    double x,y;
    while(1){
        scanf("%lf %lf",&x,&y);
        printf("%.2lf\n",f(x,y));
    }
    return 0;
}
搜索更多相关主题的帖子: 代码 发上 限制 double sum 
2018-10-26 15:59
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
你不贴题目要求,让别人猜吗?
2018-10-26 16:03
qiujiao
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2018-10-26
得分:0 
编写一个递归函数(或非递归函数),计算如下定义的函数f:
(1)当x为负数时,f(x, y) = x + y;
(2)当x为非负数时,f(x, y) = f(x-1, x+y) + x/y 。
其中,x(x不大于1000),y都是实数,f的值也是实数。
输入
输入数据有多组,每组占一行,由两个实数(即x,y)组成。
输出
对于每组输入数据,输出一行,结果保留两位小数。
输入样列
0 3.14
1 1
-1 5.7857
输出样例
2.14
2.00
4.79


[此贴子已经被作者于2018-10-26 16:18编辑过]

2018-10-26 16:14
qiujiao
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2018-10-26
得分:0 
非常对不起,刚刚粘错了
2018-10-26 16:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
    double x,y;
    while(1){
        scanf("%lf %lf",&x,&y);
        printf("%.2lf\n",f(x,y));
    }
死循环吧,改为
    for( double x,y; scanf("%lf%lf",&x,&y)==2; )
        printf( "%.2f\n", f(x,y) );
试试

当然,我觉得你的算法也有错误,
2018-10-26 16:34
qiujiao
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2018-10-26
得分:0 
改成这个,变成了答案错误???
2018-10-26 16:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
        for(int i=1;a-i>=0;i++){
            sum=sum+a/b;
            b=a+b;
            a=a-1;
        }
        sum=a+b;
其中 a-i>=0 我觉得有问题,因为a在中途是变化的,不再是原先的值了
其中 sum=a+b 我觉得也有问题,应该是 sum=b-1
2018-10-26 16:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
按照你源代码修改的
程序代码:
double f( double a, double b )
{
    double sum = 0;
    if( a < 0 )
        sum = a + b;
    else if( a == 0 )
        sum = b - 1;
    else
    {
        for( ; a>0; )
        {
            sum += a/b;
            b += a;
            a = a-1;
        }
        sum += b-1;
    }
    return sum;
}

假如用递归
double f_std( double x, double y )
{
    return x<0 ? x+y : f(x-1,x+y)+x/y;
}



2018-10-26 16:55
qiujiao
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2018-10-26
得分:0 
他现在又回到超出输出限制了
2018-10-26 16:57
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 9楼 qiujiao
超时的问题,在5楼不就解决了吗?

是如下这段代码仍然超时吗?
程序代码:
#include <stdio.h>

//double f_std( double x, double y )
//{
//    return x<0 ? x+y : f(x-1,x+y)+x/y;
//}
double f( double a, double b )
{
    double sum = 0;
    if( a < 0 )
        sum = a + b;
    else if( a == 0 )
        sum = b - 1;
    else
    {
        for( ; a>0; )
        {
            sum += a/b;
            b += a;
            a = a-1;
        }
        sum += b-1;
    }
    return sum;
}

int main( void )
{
    for( double x,y; scanf("%lf%lf",&x,&y)==2; )
        printf( "%.2f\n", f(x,y) );
}

2018-10-26 17:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-490710-1-1.html




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

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