两道编程题

    技术2022-07-11  95

    今日再做后天答辩需要的PPT和代码,仅做了三道编程题,完成两道,一道未能通过测试。 第一题链接:https://pintia.cn/problem-sets/15/problems/724 本体是一个函数题,需要注意的是,如何实现能通过多个节点以及如何判断出空结点。 int Rverse(List L) { List p1=NULL,p2=NULL; while (L) { p2=L->Next; L->Next=P1; p1=L; L=p2; } return p1; } 第二题是一个程序题,链接是https://pintia.cn/problem-sets/15/problems/710 #include <iostream> #include <stdio.h> #include<stdlib.h> using namespace std; class List{ private: class Node{ int xishu; int zhishu Node *head; }; public: List(){ head=new Node; head-nest=NULL; } void makeEmpty() { Node *p; p=new Node; while(head->next!=NULL) { p=head->next; head->next=p->next; delete p; } } void input(int n) { int val1,val2; Node *newnode; Node *last; last=head; for(int i=0;i<n;i++) { cin>>val1>>val2; newnode=new Node; newnode->coefficient=val1; newnode->exponent=val2; last->next=newnode; last=newnode; } last->next=NULL; } void output() { Node *p; p=head->next; if(p==NULL){ cout<<"0 0"<<endl; } while(p!=NULL){ cout<<p->coefficient<<" "<<p->exponent; p=p->next; if(p) cout<<" "; else cout<<endl; } } void mutiply(Linklist &a,Linklist &b) { Node *newnode,*current; Node *p,*q; current = head; p=a.head->next; q=b.head->next; if(p==NULL||q==NULL) head->next=NULL; else { int maxsize = q->exponent + p->exponent; int *result; result = new int[maxsize + 1]; for (int i = 0; i<= maxsize; i++) result[i] = 0; } while(p!=NULL) { while(q!=NULL) { int k; k=p-> p->exponent + q->exponent; result[k] = result[k] + p->coefficient * q->coefficient; q = q->next; } p = p->next; q = b.head->next; } for (int i = maxsize; i >= 0; i--) { if (result[i] != 0) { newnode = new Node; newnode->exponent = i; newnode->coefficient = result[i]; current->next = newnode; current = newnode; } delete[]result; current->next = NULL; } } void add(Linklist &a, Linklist &b) { Node *p, *q; Node *newnode; Node *current; current=head; p = a.head->next; q = b.head->next; if(p==NULL&&q!=NULL){ head->next=q; } else if(q==NULL&&p!=NULL){ head->next=p; } else if(p==NULL&&q==NULL){ head->next=p; } else { while (p && q) { if (p->exponent > q->exponent) { newnode = new Node; newnode->exponent = p->exponent; newnode->coefficient = p->coefficient; current->next = newnode; current = newnode; p = p->next; } else if (p->exponent == q->exponent) { if (p->coefficient + q->coefficient == 0) { p = p->next; q = q->next; } else { newnode = new Node; newnode->exponent = p->exponent; newnode->coefficient = p->coefficient + q->coefficient; current->next = newnode; current = newnode; p = p->next; q = q->next; } } else { newnode = new Node; newnode->coefficient = q->coefficient; newnode->exponent = q->exponent; current->next = newnode; current = newnode; q = q->next; } } current->next = NULL; if (p != NULL) current->next = p; if (q != NULL) current->next = q; } } }; int main() { Linklist a,b,c,d; int alength,blength; cin>>alength; a.input(alength); cin>>blength; b.input(blength); c.mutiply(a,b); c.output(); d.add(a,b); d.output(); return 0; } ```
    Processed: 0.016, SQL: 9