艰难的英语单词:(哈哈哈哈哈,顺便复习英语了!)
polynomial 英 [ˌpɒlɪ'nəʊmɪəl] 多项式 n.
exponents 英 [ɪks'pəʊnənts] 指数 n.
coefficients 英 [kəʊɪ'fɪʃənts] 系数 n.
题意: 给出两个多项式, 输出多项式相加的结果。
多项式输入的格式是,K(项数),ai(次数),bi(系数),。。。。,an,bn
输入两个多项式。K是整数,次数ai是整数并且自大而小,系数是浮点数。
难点:一直WA,一直WA。 很绝望。出现了以及自己没考虑到很多问题。最后终于AC。。。
1、整型和浮点型没看仔细
2、并不需要自行排序
3、输出格式是,次数大的在前面
4、相加结果导致系数为0的时候,这一项就舍去不要输出了。。。项数也要减一的
5、如果最后结果是0项,末尾是不能有空格的
6、最后一直没有AC,百思不得其解,不知道错哪了,结果。。。是Debug用的printf没有注释掉。。。极其愚蠢。。。
7、写的代码超级啰嗦,我看了别人的代码,就30行 ╥﹏╥
Code: 我的弱智代码
#include
#include
#include
#include
#include
using namespace std;
#define inf 50
#define loop(x,y,z) for(x=y;x (const Node& j)const//系数小的在前面
{
return rank>j.rank;
}
};
vectorn1;
vectorn2;
vectorans1;
vectorans2;
int main()
{
n1.clear();
n2.clear();
ans1.clear();
ans2.clear();
int num1=0,num2=0;
int i,j;
scanf("%d",&num1);
loop(i,0,num1)
{
double a,b;
scanf("%lf%lf",&a,&b);
n1.push_back(Node(a,b));
}
scanf("%d",&num2);
loop(i,0,num2)
{
double a,b;
scanf("%lf%lf",&a,&b);
n2.push_back(Node(a,b));
}
i=j=0;//开始计算结果
while(in2[j])
{
ans1.push_back(n1[i]);
//printf("debug : %.1f %.1f\n",n1[i].rank,n1[i].value);
i++;
}
else if(n2[j]>n1[i])
{
ans1.push_back(n2[j]);
j++;
}
else
{
ans1.push_back(Node(n1[i].rank,n1[i].value+n2[j].value));
i++;
j++;
}
}
//防止有最大次数项未保存记入
loop(i,i,num1)ans1.push_back(n1[i]);
loop(j,j,num2)ans1.push_back(n2[j]);
int sum=ans1.size();
loop(i,0,sum)
if(ans1[i].value!=0)
ans2.push_back(ans1[i]);
sum=ans2.size();
if(sum==0)
printf("%d\n",sum);
else
{
printf("%d",sum);
i=0;
loop(i,0,sum)
printf(" %d %.1f",(int)ans2[i].rank,ans2[i].value);
printf("\n");
}
return 0;
}
在网上瞅见了小姐姐的代码,反省之后,重写如下代码,整洁不少。。。。
这种思路就是用数组来存储系数,ans[i]就表示 i 次幂的项系数是多少。
#include
#include
#include
#include
#include
#include
using namespace std;
#define inf 1009
#define loop(x,y,z) for(x=y;x=0;i--)
if(ans[i]!=0)
printf(" %d %.1f",i,ans[i]);
printf("\n");
return 0;
}
以下是小姐姐的代码,自博客:https://blog.csdn.net/liuchuo/article/details/51985915
更加明白自己的愚蠢 ╥﹏╥
优秀代码如下:(转载)
设立c数组,长度为指数的最大值,c[i] = j表示指数i的系数为j,接收a和b输入的同时将对应指数的系数加入到c中,累计c中所有非零系数的个数,然后从前往后输出所有系数不为0的指数和系数~
#include
using namespace std;
int main() {
float c[1001] = {0};
int m, n, t;
float num;
scanf("%d", &m);
for (int i = 0; i < m; i++) {
scanf("%d%f", &t, &num);
c[t] += num;
}
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d%f", &t, &num);
c[t] += num;
}
int cnt = 0;
for (int i = 0; i < 1001; i++) {
if (c[i] != 0) cnt++;
}
printf("%d", cnt);
for (int i = 1000; i >= 0; i--) {
if (c[i] != 0.0)
printf(" %d %.1f", i, c[i]);
}
return 0;
}