PAT第一天

1001 A+B Format 

(解题思路):利用数组存取每一位,当数组的下标是3的倍数的时候额外输出一个','

#include<iostream>
#include<vector>
using namespace std;

int main(){
    int a,b;
    cin>>a>>b;
    int sum=a+b;
    if(sum==0){
        cout<<0;
        return 0;  
    }
    if(sum<0){
        cout<<'-';
        sum*=-1;
    }
    vector<int>v;
    while(sum!=0){
        v.emplace_back(sum%10);
        sum/=10;
    }
    for(int i=v.size()-1;i>=0;i--){
        cout<<v[i];
        if(i&&i%3==0)cout<<','; //注意当i为零的时候不需要输出','
    }
    return 0;
}

  

1002 A+B for Polynomials

 (解题思路):利用数组存储幂不相同的x的系数,最后进行输出(注意事项):数组初始为0;由于精度原因,最好利用printf函数进行输出
#include<iostream>
#include<cstdio>
using namespace std;

int main(){
    double cur[1001]={0};
    int k;
    cin>>k;
    while(k--){
        int n;
        double d;
        cin>>n>>d;
        cur[n]+=d;
    }
    cin>>k;
    while(k--){
        int n;
        double d;
        cin>>n>>d;
        cur[n]+=d;
    }
    int Sum=0;
    for(int i=0;i<=1000;i++){
        if(cur[i]!=0)Sum++;
    }
    cout<<Sum;
    for(int i=1000;i>=0;i--){
        if(cur[i]!=0){
            printf(" %d %.1f",i,cur[i]);
        }
               
    }
    
    return 0;
}

1002 A+B for Polynomials

 (解题思路2):目的:减少数组的空间消耗  优化:利用map存储幂不相同的x的系数,最后进行输出 
#include<iostream>
#include<map>
#include<cstdio>
using namespace std;

int main(){
    map<int,double>cur;
    int k;
    cin>>k;
    while(k--){
        int n;
        double d;
        cin>>n>>d;
        cur[n]+=d;
    }
    cin>>k;
    while(k--){
        int n;
        double d;
        cin>>n>>d;
        cur[n]+=d;
        if(cur[n]==0)cur.erase(n); //为了方便计算多项式的式子的数量
    }
    cout<<cur.size();
    for(auto it=cur.end();it!=cur.begin();){
            --it;
            printf(" %d %.1f",it->first,it->second);         
    }
    
    return 0;
}
posted @ 2023-01-13 22:42  jerry-autumn  阅读(23)  评论(0)    收藏  举报