1. 程式人生 > >pat 甲級1009.Product of Polynomials (25)(c 語言實現)

pat 甲級1009.Product of Polynomials (25)(c 語言實現)

#include<stdio.h>
#include<stdlib.h>
#define MAXN 1005
typedef struct m
{
	int k;
	float kn;
}num;
int cmp(const void*a,const void*b)
{
	num s1=*(num*)a;
	num s2=*(num*)b;
	return s2.k-s1.k;
}
main()
{
	int n,m,z;
	num a[MAXN],b[MAXN],c[MAXN];
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d %f",&a[i].k,&a[i].kn);
	}
	scanf("%d",&m);
	for(int i=0;i<m;i++)
	{
		scanf("%d %f",&b[i].k,&b[i].kn);
	}
	int count=0,flag,l=0;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			flag =0;
			for(z=0;z<count;z++)
			{
				if((a[i].k+b[j].k)==c[z].k)
				{c[z].kn+=a[i].kn*b[j].kn;
				if(c[z].kn==0.0){//測試點1wa 忘了可能係數為0,補救一下  
					c[z].k=-1;  //純粹不想用陣列重寫 
					l++;
				}
				flag=1;}
			}
			if(!flag)
			{
				c[count].k=a[i].k+b[j].k;
				c[count].kn=a[i].kn*b[j].kn;
				 count++;
			}
			
		}
	}
	qsort(c,count,sizeof(num),cmp);
		printf("%d",count-l);
	for(int i=0;i<count;i++)
	{
		if(c[i].k>=0)
		printf(" %d %.1f",c[i].k,c[i].kn);
	}
}