美文网首页PAT
1002 A+B for Polynomials

1002 A+B for Polynomials

作者: 胖胖的熊管家 | 来源:发表于2020-03-28 15:34 被阅读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);

    相关文章

      网友评论

        本文标题:1002 A+B for Polynomials

        本文链接:https://www.haomeiwen.com/subject/bkkduhtx.html