您的位置:首页 > 其它

浙大PAT甲级-1009

2017-06-29 11:18 281 查看
多项式乘法

关键点:

-用二维数组存多项式

-合并指数相同的项

-插入排序调整项的顺序#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
double a[10][2], b[10][2], ab[100][2];
int n, m, i, cnt=0;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i][0]>>a[i][1];
cin>>m;
for(i=0;i<m;i++)
cin>>b[i][0]>>b[i][1];
//计算
for(i=0;i<n;i++)
for(int j=0;j<m;j++){
ab[cnt][0]=a[i][0]+b[j][0];
ab[cnt++][1]=a[i][1]*b[j][1];
}
//合并
for(i=0;i<n*m;i++){
for(int j=i+1;j<n*m;j++)
{
if(ab[i][0]==ab[j][0]&&ab[i][0]!=-1){
ab[i][1]=ab[i][1]+ab[j][1];
ab[j][0]=-1;
}
}
}

//排序
for(i=1;i<n*m;i++){
double temp0=ab[i][0];
double temp1=ab[i][1];
for(int j=i-1;j>=0;j--){
if(temp0>ab[j][0]){
ab[j+1][0]=ab[j][0];
ab[j+1][1]=ab[j][1];
}else{
ab[j+1][0]=temp0;
ab[j+1][1]=temp1;
break;
}
}
}

i=0;
cnt=0;
while(i<m*n){
if(ab[i][0]>=0&&ab[i][1]!=0)
cnt++;
i++;
}
printf("%d",cnt);

i=0;
while(i<m*n){
if(ab[i][0]>=0&&ab[i][1]!=0){
int e=(int)ab[i][0];
printf(" %d %.1f",e,ab[i][1]);
}
i++;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  浙大 PAT 甲级 1009