• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
村雨sup
自己选的路,跪着也要走完 XD
博客园    首页    新随笔    联系   管理    订阅  订阅
数据结构(二)

问题 B: 数据结构作业01 -- 一元多项式的求和

时间限制: 1 Sec  内存限制: 128 MB
提交: 2336  解决: 456
[提交][状态][讨论版]

题目描述

一个一元多项式可以看作由若干个一元单项式按降幂排列成的线性表。请编写程序对输入的两个一元多项式求和,并输出求和的结果。

输入

输入为两个一元多项式,每个一元多项式输入一行,按照降幂依次输入每个单项式的系数和指数,并以-1 -1作为结束。系数和指数均为整数,指数不小于0。

输出

输出为求和结果多项式,按照降幂依次输出每个单项的系数和指数,每个数值后面用一个空格隔开,输出结果多项式后换行。 系数为0的单项式不得输出——除非结果多项式就是0,则直接输出0。

样例输入

2 7 3 5 12 1 6 0 -1 -1
7 5 9 4 3 0 -1 -1

样例输出

2 7 10 5 9 4 12 1 9 0 

 

#include "iostream"
#include "algorithm"
#include "cstdio"
#include "cstring"
using namespace std;

struct Point
{
    int a;
    int b;
    Point *next;
};

Point *creat()
{
    Point *h,*s,*t;
    h = new(Point);
    s = h;
    h = new(Point);
    s->next = h;
    t = NULL;
    cin >> h->a >> h->b;
    while(h->a != -1 &&h->b != -1)
    {
        t = h;
        h = new(Point);
        cin >> h->a >> h->b;
        t->next = h;
    }
    h->next = NULL;
    return s;
}

Point *add(Point *h1,Point *h2) {
    Point *p, *q, *pre, *temp;
    p = h1->next;
    q = h2->next;
    pre = h1;
    int sum;
    while (p != NULL && q != NULL) {      //此处bug
        if (p->b > q->b) {
            pre->next = p;
            pre = pre->next;
            p = p->next;
        } else if (p->b < q->b) {
            pre->next = q;
            pre = pre->next;
            q = q->next;
        } else {
            sum = p->a + q->a;
            if (sum != 0) {
                p->a = sum;
                pre->next = p;
                pre = pre->next;
                p = p->next;
                temp = q;
                q = q->next;
                free(temp);
            } else {
                temp = p->next;
                free(p);
                p = temp;
                temp = q->next;
                free(q);
                q = temp;
            }

        }
        if (p != NULL) {               //此处bug
            pre->next = p;
        } else {
            pre->next = q;
        }
    }
    return h1;
}

int main()
{
    Point *h1,*h2,*h;
    h1 = creat();
    h2 = creat();
    h = add(h1,h2);
    if(h->next->b == -1)         //此处bug
        cout << "0 "<<endl;
    else
    {
        for(Point *t = h->next;t->b != -1;t = t->next)
        {
            cout << t->a << " " << t->b << " ";
        }
        cout << endl;
    }
    return 0;
}

这指针搞得我要精神分裂了!!!!!!!!!!!

改bug改了一天,终于AC了

11/1号更新:当测试时出现无限循环的大数字的时候是for中出现指针超过判断条件了p->next !=NULL 被直接跳过了结果p->next一直运行下去输出有规律的大数

posted on 2017-10-21 21:00  村雨sup  阅读(409)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3