多项式的加分和乘法
多项式的加分和乘法
阿豪boy 发表于10个月前
多项式的加分和乘法
  • 发表于 10个月前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

https://www.patest.cn/contests/pat-a-practise/1002

多项式的加法

可以将多个多项式看成一个多项式,进行化简即可

1,令p[MAX]表示多项式,其中p[n]表示幂次为n的项的系数,初值为0,count表示系数非零项的个数,初值为0

2,先按照输入格式读入第一个多项式,在读入第二个多项式,并把对应系数直接加到第一个多项式上

3,计算非零项的个数并输出非零项

4,由于可能出现抵消的情况,count的计算应在最后化简后

#include <iostream>
#include <cstdio>
using namespace std;
const int MAX=1111;
double p[MAX] ={0};
int main(int argc, char *argv[])
{
	int k,n,count=0;
	double a;
	scanf("%d",&k);
	for(int i=0;i<k;i++){
		scanf("%d %lf",&n,&a);
		p[n] += a;
	}	 
	scanf("%d",&k);
	for(int i=0;i<k;i++){
		scanf("%d %lf",&n,&a);
		p[n] += a;
	}
	
	for(int i=0;i<MAX;i++){
		if(p[i]!=0) count++; 
	}
	printf("%d",count);
	for(int i=MAX-1;i>=0;i--)
		if(p[i]!=0) printf(" %d %.1lf",i,p[i]);
	return 0;
}

 

 

乘法

我的代码,转换为加法,需要引入ans数组

#include <iostream>
#include <cstdio>
const int MAX = 2020;
double p[MAX] = { 0 };
double ans[MAX] = { 0 };
using namespace std;
int main(int argc, char *argv[]) {
	int n, k, m;
	double t;
	int cnt = 0;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d %lf", &k, &t);
		p[k] += t;
	}
	scanf("%d", &m);
	for (int i = 0; i < m; i++) {
		scanf("%d %lf", &k, &t);
		for (int j = 0; j < MAX; j++) {
			if (p[j] != 0.0) {
				int a;
				double b;
				a = j + k;
				b = p[j] * t;
				ans[a] += b;
			 
			}

		}
	}
	cnt = 0;
	for (int i = 0; i < MAX; i++)
		if (ans[i] != 0.0) cnt++;
	printf("%d", cnt);

	for (int i = MAX-1; i >= 0; i--)
		if (ans[i] != 0.0)
			printf(" %d %.1lf", i, ans[i]);
	return 0;
}

 

其他做法

#include <iostream>
#include <cstdio>
using namespace std;
struct Poly{
	int exp;	//指数 
	double cof;	//系数 
}p[1010];		//第一个多项式

double ans[2020];//存放结果
 
int main(int argc, char *argv[])
{
	int n,m,cnt=0;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
		scanf("%d %lf",&p[i].exp,&p[i].cof);
	scanf("%d",&m);
	for(int i=0;i<m;i++){
		int exp;
		double cof;
		scanf("%d %lf",&exp,&cof);	//第二个多项式的指数和系数
		for(int j=0;j<n;j++)
			ans[exp+p[j].exp] += (cof*p[j].cof); 
	}
	for(int i=0;i<=2000;i++)
		if(ans[i]!=0.0 ) cnt++;
	printf("%d",cnt);
	for(int i=2000;i>=0;i--)
		if(ans[i]!=0.0)
			printf(" %d %.1lf",i,ans[i]);
			
	return 0;
}

 

共有 人打赏支持
粉丝 3
博文 471
码字总数 354572
×
阿豪boy
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: