2017 자료구조

From: 2017-03-10 00:00:00 To: 2017-06-30 00:00:00 Now: 2024-11-21 22:11:38 Status: Public

G - 다항식의 덧셈,뺄셈,곱셈(리스트)

Time Limit: 1s Memory Limit: 128MB

Snippet Judge Submissions: 41 Solved: 2
Description

p1, p2 다항식을 입력받아 p1+p2, p1-p2, p1*p2의 결과를 찾아라.

Input

* Line 1 : n1 n2 (1~100범위의 p1과 p2의 coefficient의 개수)

* Line 2 ~ n1+1 : coefficient(-1,000~1,000 정수) exponent(-1,000~1,000 정수)

* Line n1+2 ~ n1+n2+1 : coefficient(-1,000~1,000 정수) exponent(-1,000~1,000 정수)

* exponent의 값은 내림차순으로 입력됨

Output

sample output의 형식에 따라 p1+p2, p1-p2, p1*p2의 결과를 차례대로 출력

Sample Code
#include <stdio.h>
#include <stdlib.h>
#define MAX(a,b) (((a)>(b))?(a):(b))
#define MAX_DEGREE 101
#define POLY_ADD 0
#define POLY_SUB 1
#define POLY_MUL 2

typedef struct ListNode {
	int coef = 0;
	int expon = 0;
	struct ListNode *link = NULL;
} ListNode;

typedef struct ListHeader {
	int length = 0;
	ListNode *head = NULL;
	ListNode *tail = NULL;
} ListHeader;


YOUR_CODE


int main()
{
	ListHeader p1, p2, p3;
	int i, coef, exp, plen1, plen2;

	init(&p1);
	init(&p2);
	init(&p3);

	scanf("%d", &plen1);
	scanf("%d", &plen2);

	for (i = 0; i < plen1; i++) {
		scanf("%d %d", &coef, &exp);
		insert_node(&p1, coef, exp);
	}

	for (i = 0; i < plen2; i++) {
		scanf("%d %d", &coef, &exp);
		insert_node(&p2, coef, exp);
	}

	p3 = poly_arithmetic(p1, p2, POLY_ADD);
	poly_print(p3);

	p3 = poly_arithmetic(p1, p2, POLY_SUB);
	poly_print(p3);

	p3 = poly_arithmetic(p1, p2, POLY_MUL);
	poly_print(p3);

	return 0;
}
Sample Input
4 3
1 100
-3 1
3 0
1 -100
1 2
2 1
1 -1
Sample Output
1 100
1 2
-1 1
3 0
1 -1
1 -100
1 100
-1 2
-5 1
3 0
-1 -1
1 -100
1 102
2 101
1 99
-3 3
-3 2
6 1
-3 0
3 -1
1 -98
2 -99
1 -101
Source

c자료구조4장