PAT Grade A Brush Test Record-1002 A + B para polinomios (25 puntos)

Esta vez, se supone que debes encontrar A + B donde A y B son dos polinomios.

Especificación de entrada:

Cada archivo de entrada contiene un caso de prueba. Cada caso ocupa 2 líneas, y cada línea contiene la información de un polinomio:
KN 1 un N1 N 2 un N2 ... N K un NK
donde K es el número de términos no nulos en el polinomio, N IAND un Ni (i = 1,2, ⋯, K) son los exponentes y coeficientes, respectivamente. Se da que 1≤K≤10,0≤N K <⋯ <N 2 <N 1 ≤1000.

Especificación de salida:

Para cada caso de prueba, debe generar la suma de A y B en una línea, con el mismo formato que la entrada. Tenga en cuenta que NO debe haber espacio adicional al final de cada línea. Sea preciso con 1 decimal.

Entrada de muestra:

2 1 2.4 0 3.2
2 2 1.5 1 0.5

Salida de muestra:

3 2 1.5 1 2.9 0 3.2

Ideas

Esta pregunta también es muy simple, porque el índice se rige estrictamente por [0,1000], y la salida también se debe emitir de acuerdo con el tamaño del índice (tenga en cuenta que aquí está el orden inverso), así que use directamente el subíndice de matriz para representar el índice, su El valor representa que el coeficiente se almacena, luego cada vez que se leen n y an (n es un exponente, an es un coeficiente), se da el p [n] + = an correspondiente. En este caso, siempre que p [n] no sea 0, entonces Representa un elemento distinto de cero, por lo que cnt ++ (porque el número total de todos los elementos distintos de cero se emite al final), y finalmente atraviesa la matriz hacia atrás para generar el índice y el coeficiente.
Para minimizar el consumo de tiempo, sugiero registrar el índice más alto al leer (usé maxi aquí), de modo que i = maxi directamente hasta que i = 0 atraviese la salida de la matriz en orden inverso.

Código

#include<cstdio> 
#include<string>
#include<iostream>
using namespace std;
const int maxn = 1001;
double p[maxn]={0};//初始化所有系数是0 
int main(){
	int maxi = 0;
	int k1;
	scanf("%d", &k1);
	while(k1--){
		int n;
		double an;
		scanf("%d%lf", &n, &an);
		p[n] += an;//下标是指数,值是系数
		if(n>maxi) maxi = n;
	}
	int k2;
	scanf("%d", &k2);
	while(k2--){
		int n;
		double an;
		scanf("%d%lf", &n, &an);
		p[n] += an;
		if(n>maxi) maxi = n;
	}
	int cnt = 0;
	for(int i=0;i<=maxi;i++){
		if(p[i]!=0) cnt++;
	}
	printf("%d", cnt);
	for(int i=maxi;i>=0;i--){
		if(p[i]!=0){
			printf(" %d %.1f", i, p[i]);
		}
	}
    return 0;
}
Publicado 54 artículos originales · ganó 27 · vistas 4972

Supongo que te gusta

Origin blog.csdn.net/weixin_42257812/article/details/105589372
Recomendado
Clasificación