| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9461 人关注过本帖
标题:1010. 一元多项式求导
只看楼主 加入收藏
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
结帖率:100%
收藏
已结贴  问题点数:11 回复次数:14 
1010. 一元多项式求导
题目网址https://www.
1010. 一元多项式求导 (25)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)

输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。

输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
程序代码:
#include <stdio.h>

int main()
{
    int coefficient = 1, exponential = 1;//    coefficient:系数 , exponential:指数 
    
    scanf("%d%d", &coefficient, &exponential);
    while (0 != exponential)
    {
        printf("%d %d", coefficient * exponential, exponential - 1);
        scanf("%d%d", &coefficient, &exponential);
        if ()
        if (0 != exponential)
            printf(" ");
    }
    if (coefficient == 0)
        printf("0 0");

    return 0;
} 

这个是我写的代码,为啥在第2个测试点会显示运行超时?
搜索更多相关主题的帖子: 绝对值 多项式 
2016-05-24 20:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:4 
题目没说以0结尾,这也算了,但
if ()
这个是我写的代码,为啥在第2个测试点会显示运行超时?
是个什么鬼,绝不可能编译通过,哪来的运行超时?
2016-05-25 08:37
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:4 
图片附件: 游客没有浏览图片的权限,请 登录注册

如图所示,当输入5 2 0 0时,你的程序多输出了一个0 0.所以说要验证输入的多项式是不是真的零多项式,你得加个flag。(当然,这不是导致超时的原因啦)
不知道你有没想过,这个程序的输入,并不是以系数为零的项为最后一项。系数是包括负数的,而且呈递降趋势。所以导致超市的原因是你的程序不能正确读取到最后一个输入,而是在读到最后一项后停在那里,继续等待。。。
()

φ(゜▽゜*)♪
2016-05-25 10:37
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:3 
回复 3楼 书生牛犊
哈哈,在这里遇到“道友”咯。。。我也在pta上刷题好久了。。。
这个“1010.一元多项式”,以前做过,但是今天把那个文件翻出来,又拿到pat上面提交却显示“内部错误”。关于这个错误的原因我还不太明白,但是在本地手动测试是没错啊。
程序代码:
#include<stdio.h>
#include<stdlib.h>
int main(){
    int a,b,k[2001]={0};
      char c;
    do{
        scanf("%d%d",&a,&b);
        k[b+1000]+=a;
    }while((c=getchar())!='\n');
    for(int i=1000;i<2001;i++){
        if(i>1000&&k[i]){k[i-1]=k[i]*(i-1000);
        k[i]=0;}
    }
    for(int i=999;i>=0;i--){
        if(k[i]){k[i+1]=k[i]*(i-1000);
        k[i]=0;}
    }
    int cnt=0;
    for(int i=2000;i>=0;i--){
        if(k[i]){
            if(cnt)printf(" ");
            printf("%d %d",k[i],i-1000);
            cnt++;
        }
    }
    if(!cnt)printf("0 0");
    return 0;

}

刚刚看了一下代码好复杂,,我想与其去找是什么原因导致“内部错误”的,不如重新用链表来做这道题。因为这道题就是一个单项有序的题目。非常符合单项链的模型。

φ(゜▽゜*)♪
2016-05-25 10:51
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:0 
回复 2楼 rjsp
粘错了没有这一句
2016-05-25 12:28
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:0 
回复 3楼 书生牛犊
恩恩,知道咋超时了
2016-05-25 12:31
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:0 
回复 4楼 书生牛犊
这两天PAT有问题,
不过你的代码定义了数组,如果没有使用完会浪费空间的
2016-05-25 12:33
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 7楼 ldsh304
是啊,所以我说现在让我做我会用单向链。
不过像这道题的区间只有【-1000,1000】,不需要怎么思考内存的问题,相反,如果题目进一步升级成非有序多项式之类的必须把结果用某种形式存储的话,用数组就比你那种“直达”的更有优势些。

φ(゜▽゜*)♪
2016-05-25 13:37
TK4Moma
Rank: 2
等 级:论坛游民
帖 子:9
专家分:19
注 册:2016-4-26
收藏
得分:0 
666   
2016-05-25 14:00
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
以下是引用ldsh304在2016-5-25 12:28:48的发言:

粘错了没有这一句
那我就在你原来的代码上改改
程序代码:
#include <stdio.h>
#include <stdbool.h>

int main( void )
{
    bool f = false;
    for( int c,e; scanf("%d%d",&c,&e)==2; )
    {
        if( c*e != 0 )
        {
            printf( f?" %d %d":"%d %d", c*e, e-1 );
            f = true;
        }
    }
    if( !f )
        puts( "0 0" );

    return 0;
}

2016-05-25 14:51
快速回复:1010. 一元多项式求导
数据加载中...
 
   



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

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