浙大PAT满分之路-(第二天)1002
原题:
题目概要:计算多项式的项数以及每次项的系数
输入:两行,每行第一个代表要输入几个项,然后两个为一组,分别代表项的次数以及项的系数,第二行也一样。
输出:两个多项式相加,输出项数,然后两两对应从大到小输出项的次数,以及对应项的系数
难点:英语,保存项数的方式
提交结果:
前几次提交错误的情况有:
开头多了个空格,没有看到保留一位小数的要求,然后只使用了setprecision(1)函数,没有使用fixed填充0,因为只使用setprecision函数时会把为0时的末尾小数删掉,固需要使用fixed函数把末尾的0补上,具体可以百度这两个函数的用途。
思路:
首先考虑题目所给因素,保留一位小数
使用iomanip与setiosflags(ios::fixed)<<setprecision(1)使用
同时用数组下标代表项的次数
用对应的内容代表多项式的项数
输出前为了统计有多少项,先for遍历一次,找到所有有值项数,用sum变量统计项数,最终按格式输出
代码如下:
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int a;
int exchange;
double plus_num;
int sum=0;
double b[1005] = {0.0};
int c;
cin>>a;
for(int i = 1;i<=a;i++){
cin>>exchange;
cin>>b[exchange];
}
cin>>c;
for(int i = 1;i<=c;i++){
cin>>exchange;
cin>>plus_num;
b[exchange]+=plus_num;
}
for(int i = 0;i<1001;i++){
if(b[i]!=0){
sum++;
}
}
cout<<sum;
for(int i = 1001;i>=0;i--){
if(b[i]!=0){
cout<<' '<<i<<' '<<setiosflags(ios::fixed)<<setprecision(1)<<b[i];
}
}
return 0;
}