题意:
输入:两个多项式,第1个多项式在第1行,第2个在第2行,格式形如
多项式项数 指数N1 系数an1 指数N2 系数an2 … (K取值范围[1,10],指数Ni取值范围[0, 1000],题目保证指数的输入是递减的,即N(i-1)<N(i))
输出:两个多项式的和,格式和输入时候一样
ps:我这边提交一直显示部分答案错误,哪个大佬能给个指引(?
我的代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct A
{
int n;
float a;
};
//int comp(const A &a, const A &b)
//{
// return a.n > b.n;
//}
int main() {
struct A polyA[10], polyB[10], polyAns[20];
int tempN, k1, k2, i, j;
int answer = 0;//记录结果的项数
float tempA;
//获取第一个多项式
scanf("%d", &k1);
while(k1<1||k1>10)
scanf("%d", &k1);
for (i = 0; i < k1; i++)
{
scanf(" %d %f", &tempN, &tempA);
polyA[i].n = tempN;
polyA[i].a = tempA;
}
//sort(polyA, polyA + k1, comp);
//获取第二个多项式
scanf("%d ", &k2);
while (k2<1 || k2>10)
scanf("%d", &k2);
for (j = 0; j < k2; j++)
{
scanf(" %d %f", &tempN, &tempA);
polyB[j].n = tempN;
polyB[j].a = tempA;
}
//sort(polyB, polyB + k2, comp);
i = 0; j = 0;
//判断多项式中每一项的大小,排序写入polyAnswer[]中
while (i < k1&&j < k2)
{
if (polyA[i].n > polyB[j].n)
{
polyAns[answer].n = polyA[i].n;
polyAns[answer].a = polyA[i].a;
i++;
}
else if (polyA[i].n < polyB[j].n)
{
polyAns[answer].n = polyB[j].n;
polyAns[answer].a = polyB[j].a;
j++;
}
else
{
polyAns[answer].n = polyA[i].n;
polyAns[answer].a = polyA[i].a + polyB[j].a;
i++;
j++;
}
answer++;
}
//判断结束后将剩下的多项式写入polyAnswer[];
if (i==k1)
for (; j < k2; j++)
{
polyAns[answer].n = polyB[j].n;
polyAns[answer].a = polyB[j].a;
answer++;
}
else
for (; i < k1; i++)
{
polyAns[answer].n = polyA[i].n;
polyAns[answer].a = polyA[i].a;
answer++;
}
//按格式输出
printf("%d ", answer);
answer--;
for (i = 0; i < answer; i++)
printf("%d %.1f ", polyAns[i].n, polyAns[i].a);
printf("%d %.1f", polyAns[answer].n, polyAns[answer].a);
printf("\n");
return 0;
}