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]); // 输出 注意空格!!
}
}
}
知识点+坑:
- 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);