PAT甲级1002 1002 A+B for Polynomials

题目描述

在这里插入图片描述

题意解读

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位。
	}	                  
}
  1. double xishu[1001]={0};//因为题中声明0<=N[K]<=···<=N[2]<=N[1]<=1000 即系数coefficients的值从0->1000,所以数组一定要从1001起【因为系统会用多组不同的具有挑战性的数据来测试你提交的程序】 注意数组一定不要忘记初始化

  2. 在这里插入图片描述

  3. map可以用于判断给定的一些数字是否在这个文件中出现过。为了防止数字过大bool型数组开不了,这时就可以用上map

  4. 屏蔽掉的代码为普通数组的做法 如果不会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; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值