PAT

1002 A+B for Polynomials

2020-03-28  本文已影响0人  胖胖的熊管家

题目

输入两行数,每一行的第一个数是非零多项式的个数,后面的数中前一个数是指数,就是幂(exponents),后一个数是多项式的系数(coefficients)。要求输出的数是将相同幂次的多项式合并,也就是系数相加,最后输出的数仍旧第一个是个数,后面的数前一个是幂数后一个是系数。
要求:输出的系数如果是小数,就保留一位小数。

Sample Input
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output
3 2 1.5 1 2.9 0 3.2

解法

法一:C++
思路:

用数组,因为是幂次相同将系数相加,所以将幂数作为数组的index,系数就是数组的value。

源代码:
#include <iostream>
#include <cstdio>
#include <math.h>
using namespace std;

int main() {
    //幂数相当于index 系数相当于value
    int num1,num2;
    int index;
    double arr1[1001] = {0};
    double arr2[1001] = {0};
    
    //输入数字
    scanf("%d",&num1);
    for(int i=0;i<num1;i++){
        scanf("%d",&index);
        scanf("%lf",&arr1[index]);
    }
    scanf("%d",&num2);
    for(int i=0;i<num2;i++){
        scanf("%d",&index);
        scanf("%lf",&arr2[index]);
    }
    
    //准备循环输出
    int count = 0; //输出的第一个数  有几个
    for(int i=0;i<1001;i++){
        arr1[i] = arr1[i] + arr2[i];
        if(arr1[i] !=0){
            count++;
        }
    }
    printf("%d",count);
    
    for(int i=1000;i>-1;i--){
        if (arr1[i] != 0) {
            printf(" %d %.1f",i,arr1[i]); // 输出 注意空格!!
        }
    }
}

知识点+坑:
  1. scanf 和printf

scanf 格式化输入
printf 格式化输出

具体的小tips:

%d 表示整数%f 表示浮点数(小数)%lf 表示双精度浮点数%c 表示一个字符%s 表示一个字符串
%03d 表示用3位输出一个整数,不够三位用0补齐

eg:使用%03d 输出3时,printf(“a:%03d \n”,a);显示结果为003%.2f 表示小数点后取两位,用于四舍五入%1.3f 表示小数点前保留1位,小数点后保留3位
连续输出多个整数:printf(“%d,%d",a, b);

上一篇下一篇

猜你喜欢

热点阅读