zoukankan      html  css  js  c++  java
  • 1002. A+B for Polynomials (25)

    (1)思路

    用vector保存两个多项式结构

    将其中一个的所有元素压入一个结果vecotor,然后另一个vector对每个元素进行迭代

    一旦找到指数相同相的就改变结果vector中项的系数

    注意题目中要求 where K is the number of nonzero terms in the polynomial

    所以要舍弃所有系数为零的项

    #include <cstdio>
    #include <vector>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    int n;
    struct re{
      int exp;
      double coe;
    };
    const double EPS=1e-8;
    vector<re> add_v(vector<re> v1,vector<re> v2) {
      vector<re> temp;
      for(int i=0;i<v2.size();i++) temp.push_back(v2[i]);
      for(int i=0;i<v1.size();i++) {
        int flag=0;
        for(int j=0;j<v2.size();j++) {
          if(v1[i].exp == v2[j].exp) {
        temp[j].coe+=v1[i].coe;
        flag=1;
          }
        }
        if(flag == 0) {
          temp.push_back(v1[i]);
        }
      }
      return temp;
    }
    bool cmp(re r1,re r2) {
      return r1.exp > r2.exp;
    }
    int main() {
      vector<re> v1;
      vector<re> v2;
      scanf("%d",&n);
      for(int i=0;i<n;i++) {
        re temp;
        scanf("%d %lf",&temp.exp,&temp.coe);
        v1.push_back(temp);
      }
      scanf("%d",&n);
      for(int i=0;i<n;i++) {
        re temp;
        scanf("%d %lf",&temp.exp,&temp.coe);
        v2.push_back(temp);
      }
      vector<re> result=add_v(v1,v2);
      sort(result.begin(),result.end(),cmp);
      int size=0;
      for(int i=0;i<result.size();i++){
        if(fabs(result[i].coe) < EPS) continue;
        else size++;
      }
      printf("%d",size);
      for(int i=0;i<result.size();i++) {
        if(fabs(result[i].coe) < EPS) continue;
        printf(" %d %.1lf",result[i].exp,result[i].coe);
      }
      return 0;
    }

    (2)

    考虑到这里指数最多只有1000项所以可以用数组保存系数值,下标为指数值

    然后读入数据时修改对应指数的系数,然后记录非零项,按指数递减输出系数

    #include <cstdio>
    #include <cmath>
    using namespace std;
    const double EPS=1e-8;
    int main() {
      double result[1001]={0};
      int n;
      scanf("%d",&n);
      for(int i=0;i<n;i++) {
        double coe;
        int exp;
        scanf("%d %lf",&exp,&coe);
        result[exp]+=coe;
      }
      scanf("%d",&n);
      for(int i=0;i<n;i++) {
        double coe;
        int exp;
        scanf("%d %lf",&exp,&coe);
        result[exp]+=coe;
      }
      int size=0;
      for(int i=0;i<1001;i++) {
        if(fabs(result[i]) > EPS) size++;
      }
      printf("%d",size);
      for(int i=1000;i>=0;i--) {
        if(fabs(result[i]) > EPS) {
          printf(" %d %.1lf",i,result[i]);
        }
      }
      return 0;
    }

  • 相关阅读:
    【MyEcplise SVN】myEcplise上安装SVN的多种方式
    【微信Java开发 --番外篇】错误解析
    【MyEcplise 插件】反编译插件jad
    maven打包自动配置数据库链接信息
    window.location下的属性说明
    JavaEETest
    java正则过虑字符
    微信小程序开发之大坑记之post请求
    jQuery 获取文件后缀的方法
    java通过解析文件获取apk版本等信息
  • 原文地址:https://www.cnblogs.com/tclan126/p/8621479.html
Copyright © 2011-2022 走看看