多項式のPAT A1009製品(25分)

この時間は、あなたはAとB、2つの多項式であるA×Bを見つけることになっています。

入力仕様:

各入力ファイルには、1つのテストケースが含まれています。各ケースには2行を占め、各ラインは、情報が含ま多項式:KN 1 AN1 N 2 AN2 ... N K N K
K多項式における非ゼロ項の数であり、N IA N iが(iは、⋯、K 1,2 =)は、それぞれ、指数および係数です。これは、与えられ1≤K≤10すなわち、0≦ K <⋯<N 2 <N 1 ≤1000。

出力仕様:

各テストケースのためには、入力と同じ形式の1つのラインの出力A及びBの積を、すべきです。各行の末尾に余分なスペースがなければならないことに注意してください。小数第1位まで正確にアップしてください。

サンプル入力:

2 1 2.4 0 3.2
2 2 1.5 1 0.5

サンプル出力:

3 3 3.6 2 6.0 1 1.6

質問の意味:

2つの多項式を計算し、乗算結果B。

入力:

Aの非ゼロエントリ多項式係数インデックス...
B多項式係数の非ゼロエントリインデックス...

出力:

多項式C(* B)非ゼロエントリ係数インデックス...

アイデア:

(1)は、3つの浮動小数点の配列をとる多項式をA、B、C、添字インデックスストア、対応する係数値が格納された
非ゼロ係数の間に蓄積された(2)評価多項式Cの注目を。

コード:

#include <cstdio>
const int max_=1010;
const int maxn=2010;//两个多项式相乘的指数最大为2000
int main(){
	int k,x,count=0;
	double y,a[max_]={0},b[max_]={0},c[maxn]={0}; 
	scanf("%d",&k);
	for(int i=0;i<k;i++){
		scanf("%d %lf",&x,&y);
		a[x]=y;//x存放指数,a[x]存放对应的系数 
	}
	scanf("%d",&k);
	for(int i=0;i<k;i++){
		scanf("%d %lf",&x,&y);
		b[x]=y;
		for(int j=0;j<max_;j++){
			if(a[j]!=0){
				//if(c[x+j]==0)count++;//计数非零项(用此方法计数非零项,oj的第一个测试点通不过,因为系数相加为0的情况下也进行计数会出错)
				c[x+j]+=a[j]*b[x];//x+j存放相乘后多项式的指数,c[x+j]存放对应的系数	
			}
		}
	} 
	for(int i=0;i<maxn;i++){
		if(c[i]!=0)
			count++;
	}
	printf("%d",count); 
	for(int i=maxn-1;i>=0;i--){
		if(c[i]!=0){
			printf(" %d %.1f",i,c[i]);
		} 
	}
	return 0;
} 

用語集:

製品の製品
フォーマット形式の
小数小数、小数

PS:

70周年ええ、私はあなたのすべての幸せなナショナルデーを望みます!
(≧∀≦)ゞ

公開された26元の記事 ウォンの賞賛0 ビュー491

おすすめ

転載: blog.csdn.net/PanYiAn9/article/details/102023923