qq_22902957
千秋寒雪月
采纳率100%
2017-10-02 16:00

我的调教程序错在哪里?求指点

已采纳

程序的功能是实现计算多项式的导数。
输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

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

输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
提交代码

我的代码如下:

 #include<stdio.h>
#include<stdlib.h>
typedef struct poly{
    int coef;    //系数 
    int expon;   //指数 
    struct poly *next;
}Poly; 

int main(void)
{
    Poly *head = (Poly *)malloc(sizeof(Poly));
    head->next = NULL;
    Poly *prev = head;

    //输入多项式信息 
    while(1)
    {
        Poly *p =  (Poly *)malloc(sizeof(Poly));
        scanf("%d%d",&p->coef,&p->expon);
        p->next = NULL;
        prev->next = p;
        prev = p;

        char c = getchar();
        if(c == '\n')
            break;
    }
    Poly *t = head;head = head->next;free(t);

    //求导数并输出
    prev = head;
    int flag = 0;  //flag用于控制输出格式顺序 
    while(prev)
    {
        prev->coef *= prev->expon;
        prev->expon--; 

        if(!flag)
            flag = 1;
        else
            printf(" "); 

        if(!prev->coef)
            printf("0 0");
        else
            printf("%d %d",prev->coef,prev->expon);

        prev = prev->next;
    } 

    return 0;
}

测试用例一共有5个,以上答案提交后可以通过两个,题目给的例子中,在输出6 0 后,还会再多输出一个0 0.而如果将最后一个while循环改成prev->next,则能通过之前没有通过的三个用例。而之前那两个没有通过。希望能有高手解答,谢谢。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • a19990412 肥宅_Sean 4年前

    讲真,我觉得找Bug总是枯燥无味的。别强求别人啦。发链接都是说明别人已经以前做了相关的工作,然后叫你直接去看哇,这样多省事。
    前段是时间做的一个QT计算器
    还有,我在我一篇文章中写了我顺带做了一个图形界面,用的是QT,你进去之后自己再看看吧。
    每个人都是在这样的压力下慢慢成长哇,别好像是别人求着教你一样哇,说到这个,你不会还是个高中生吧?
    此外,你那个通过三个两个的例子真没什么好说的emmm,一般遇到这种情况,没有AC,那就是很大的问题嘛。可能只是测试数据刚刚好而已。
    多出来的那个0 0 是很正常哇,你的代码就是这么写的哇,你写的代码,在最后那个循环结束的时候,就是会进行一次输出 0 0 哇。还有 0 0 其实是在链表的长度为1的时候,才考虑的,哥~
    没事没事,我以前也是经常犯这种问题,多看看,多学学,就慢慢好了。加油哦!

    点赞 评论 复制链接分享
  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 4年前
    点赞 评论 复制链接分享