zoukankan      html  css  js  c++  java
  • PAT 甲级测试题目 -- 1002 A+B for Polynomials

    题目地址
    题目大意:输入两个多项式,每个多项式输入包含该多项式的项数,以及每项的指数和系数,将两个多项式中指数相同的系数相加。输出结果多项式的项数,按指数从大到小输出多项式中每项的指数和系数,并保留一位小数,输出格式和输入格式保持一致。
    思路:
    思路:用两个大小为1001的数组分别记录被用到的指数以及指数对应的系数之和,遍历输出。时间上要遍历三个1001次for循环分别用于两个数组的初始化以及哪些指数被用到了,属于较为时空复杂度较高且麻烦但是容易理解的思路。

    代码

    #include<iostream>
    #include<iomanip>
    using namespace std;
    
    void EnterCal(double * coefficients, int * Ks, int & index, int & number) {
    	double temp;
    	int terms;
    	cin >> terms;
    	for (int i = 0; i < terms; i++) {
    		double temp;
    		cin >> index;
    		if (Ks[index] != 1) {
    			number++;
    			Ks[index] = 1;
    		}
    		cin >> temp;
    		coefficients[index] += temp;
    		if (coefficients[index] == 0)
    			number--;
    	}
    }
    
    int main() {
    	int index;
    	double coefficients[1001];
    	int Ks[1001], terms;
    	int number = 0;
    	
    	for (int i = 0; i < 1001; i++) {
    		Ks[i] = 0;
    		coefficients[i] = 0;
    	}
    
    	EnterCal(coefficients, Ks, index, number);
    	EnterCal(coefficients, Ks, index, number);
    
    	cout << number;
    	if (number != 0)
    		cout << " ";
    
    	for (int i = 1000; i >= 0; i--)
    	{
    		if (Ks[i] != 0 && coefficients[i]!= 0 ) {			
    			cout << i << " " << fixed << setprecision(1) << coefficients[i] + pow(10, -14);
    			number--;
    			if (number > 0)
    				cout << " ";
    		}
    		
    	}
    	return  0;
    }
    

    坑点:
    题目中没有明确说明但要求:在多项式计算过后没有项数的时候,应输出0,也就是只输出项数,并不输出指数以及系数,依据估计是藏在要求输出格式和输入格式一致这里。。。

    有时间的话我试着用 C++ 中类似键值对的数据记录方式,应该会很大程度上减少时空复杂度,有时间更

  • 相关阅读:
    ssrf简介
    Mysql 命令 load data infile
    基于约束的SQL注入笔记
    ms17-010
    thinkphp5.0&5.1命令执行 和 thinkphp3.2.3sql注入
    抓取分析菜刀流量
    lamp环境的搭建
    php伪协议
    LeetCode-336 Palindrome Pairs
    LeetCode-335 Self Crossing
  • 原文地址:https://www.cnblogs.com/Breathmint/p/10262538.html
Copyright © 2011-2022 走看看