关于算法-数据结构:PAT甲级1002-AB-for-Polynomials

37次阅读

共计 701 个字符,预计需要花费 2 分钟才能阅读完成。

题目粗心:

给出两行,每行示意一个多项式: 第一个数示意该多项式中系数非零项的项数,前面每两个数示意一项,这两个数别离示意该项的幂次和系数。
试求两个多项式的和,并以与后面雷同的格局输入后果。

算法思路:

咱们在输出 A 和 B 的时候应用 result 保留 A 加 B,让 result 的下标对应指数,其值为系数,而后输出 A 的时候暂存 A,而后输出 B 的时候,间接对应下标相加即可。而后第一次遍历 result 统计不为 0 的项数 num, 而后再次从后往前遍历数组 result,将其系数不为 0 的项输入。

留神点:

1、须要保留一位小数
2、空格的输入
3、result 得初始化,不然对于其值是否为 0 来判断须要输入就行不通了。

提交后果:

AC 代码:
#include<cstdio>

using namespace std;

int main(){
    int K;
    double result[1001] = {};// result[i] 保留的是 i 次方的系数, 肯定要初始化 {}, 不然会出错 
    int N;
    double AN;// 次方和系数 
    for(int j=0;j<2;++j){scanf("%d",&K);
        for(int i=0;i<K;++i){scanf("%d %lf",&N,&AN);
            result[N] += AN;
        }
    } 
    int num = 0;// 系数不为 0 的项数 
    for(int i=1000;i>=0;--i){if(result[i]!=0){
            // 系数不为 0
            ++num;
        }
    }
    printf("%d",num);
    for(int i=1000;i>=0;--i){if(result[i]!=0){
            // 系数不为 0
            printf("%d %.1lf",i,result[i]);
        }
    }
    return 0;
} 

正文完
 0