PAT-A1002

时间:2024-10-28 20:35:56
1002 A+B for Polynomials (25)

Polynomials多项式,exponents指数,coefficients系数

输入:两行数据,每行表示一个多项式:第一个数字表示非零项的数目,后面每两个数表示一项,分别表示幂次和系数。

输出:两个多项式的和,格式与输入一样

思路一:

1.定义一个double类型的数组p[1111](长度大于1000),其中片[n]表示幂次为n的项的系数,初始化为0。定义一个int型的变量count表示非零项的个数,初始化为0;

2.先按输入格式读入第一个多项式,再读入第二个多项式,并将对应相同幂次项的系数直接加到第一个多项式上;

3.循环搜索p[]数组中值不为0的个数,赋值给count,作为第一个数字输出;再通过循环以此从高位到低位进行搜索数组中不为0值,将对应的位数和值分别按格式输出(printf("%d %.1f",i,p[i]))。

 #include <stdio.h>
#include<string.h>
//输入:两行数据,每行表示一个多项式:第一个数字表示非零项的数目,
//后面每两个数表示一项,分别表示幂次和系数。
//输出:两个多项式的和,格式与输入一样 int main(){ const int MAX_N=;
double a=0.0;
int k,n=,count=,i;//k:输入的非零项数,n:幂次,a:系数,count:和的非零项数
double p[]={};//声明时使用{0}初始化为全0
//double p[MAX_N];
//memset(p,0,MAX_N);//使用memset方法,注意要加string.h头文件 // for(i=MAX_N-1;i>=0;i--){
// printf("%.1f",p[i]);
// } //输入第一行数据
scanf("%d",&k);
for(i=;i<k;i++){
scanf("%d %lf",&n,&a);
p[n]+=a;
} //输入第二行数据
scanf("%d",&k);
for(i=;i<k;i++){
scanf("%d %lf",&n,&a);
p[n]+=a;
} for(i=;i<MAX_N;i++){
if(p[i]){
count++;
}
} printf("%d",count);
for(i=MAX_N-;i>=;i--){
if(p[i]){
printf(" ");
printf("%d %.1f",i,p[i]);
}
} return ;
}

碰到的报错:

const int MAX_N=1000;

double p[MAX_N]={0};

[Error] variable-sized object may not be initialized [错误]可变大小的对象不能初始化;

正确写法:double p[1000]={0};

相关文章