题目描述
题意解读
C+G PAT甲级第二题–A+B for Polynomials
芜湖 建议看这位大佬的 他的题意解读简单易懂 我也是看他的才看明白的
解题代码[C++]map数组&&普通数组
#include<iostream>
#include<map>
#include<cstdio>
using namespace std;
int main(){
map<int,double>xishu;
map<int,double>::iterator it;
int K;
cin>>K;//每行读入一个K,表示每行有多少项 第一个多项式
while(K--){
int exponents; //指数
double ecoefficients; //系数
cin>>exponents>>ecoefficients; //进入循环,持续读取指数和系数
xishu[exponents]+=ecoefficients; //对系数数组进行记录
//例如数据为 2 1.2 3 1.3 ,则xishu[2]=1.2,xishu[3]=1.3
//若下一组数据为 2 1.4 则xishu[2]=1.2+1.4=2.6
}
cin>>K;//第二个多项式 同第一个多项式一样的操作
while(K--){
int exponents; //指数
double ecoefficients; //系数
cin>>exponents>>ecoefficients; //进入循环,持续读取指数和系数
xishu[exponents]+=ecoefficients;
if(xishu[exponents]==0)xishu.erase(exponents);
}
// int count=0;
// for(int i=0;i<=1000;i++){
// if(xishu[i]!=0){
// count++;
// }
// }
// cout<<count;
cout<<xishu.size();
// for(int i=1000;i>=0;i--){
// if(xishu[i]!=0){
// printf(" %d %0.1f",i,xishu[i]);
// }
// }
for(it=xishu.end();it!=xishu.begin();){
--it;
printf(" %d %.1f",it->first,it->second); //不要忽略题中最后一句话Please be accurate to 1 decimal place.请精确到小数点后1位。
}
}
-
double xishu[1001]={0};//因为题中声明0<=N[K]<=···<=N[2]<=N[1]<=1000 即系数coefficients的值从0->1000,所以数组一定要从1001起【因为系统会用多组不同的具有挑战性的数据来测试你提交的程序】 注意数组一定不要忘记初始化
-
map可以用于判断给定的一些数字是否在这个文件中出现过。为了防止数字过大bool型数组开不了,这时就可以用上map
-
屏蔽掉的代码为普通数组的做法 如果不会map的话 大家可以参考一下
错误版【自己留着看的(╥﹏╥)】
普通数组版
这道题我的得分率是17 / 25,显然是没有按照他题目规定的系数范围进行答题导致有一些出题方设置的多组不同的具有挑战性的数据没办法正确运行#include
using namespace std;
int main(){ //double c[5] = {0}, //d[5] = {0}, e[5] = {0}; 不要不要不要忘记初始化数组!!!!!
int n, m,exponents;
double coefficients;
cin >> n;
for(int i = 0; i < n; i++){
cin >> exponents >> coefficients;
c[exponents] = coefficients;
}
cin >> m;
for(int i = 0; i < m; i++){
cin >> exponents >> coefficients;
d[exponents] = coefficients;
}
for(int i = 0; i < 5; i++){
e[i] = c[i] + d[i];
}
int count = 0;
for(int i = 4; i >= 0; i–){
if(e[i] != 0){
count++;
}
}
cout << count;
for(int i = 4; i >= 0; i–){
if(e[i] != 0){
cout << " " << i << " " << e[i];
}
}
return 0; }