洛谷P1067多项式输出

1. 题目描述

题目过长且有图表,在此展示不便。

详细内容见原题地址

2. Notes

要学会“单元化(unit),模板化”的思维。

所谓单元化,就是最高次数为n的多项式是由n+1项组成的,那么每一个单元就是多项式的一项,单元与单元之间的结构特点是相似的

所谓模板化,就是在单元化的基础上抓住n+1项的共同特点,造出同时适用于n+1个单元的模板,每一项都是符号 数字 含x项三项组成的,因此我们可以把这三项抽象成模板。但是对于不同的指数输出的情况不一样,不难分析出:

  1. 符号的取值情况分为+ - 无输出
  2. 数字的取值情况分为直接输出 系数1非指数为0项不输出 系数1指数为0项输出
  3. 含x项取值情况分为x^i形式 i=1时为x i=0时不输出

我觉得以上的分类讨论思路更加简洁,如果按照最高次数项,一次项,常数项,其余项来分的话,讨论起来会比较繁琐,思考的方式太数学化,而不是计算思维。

其实这道题的本质还是让你有规律性的输出一些东西。那么要结合每个单元的特点做出整体的模板。

3. 题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<bits/stdc++.h>
using namespace std;
int main(){
int now,n,i;
cin>>n;
for(i=n;i>=0;i--){
cin>>now;
if(now){
//符号
if(now>0&&i!=n){
cout<<"+";
}else if(now<0){
cout<<"-";
}
//系数
if(abs(now)>1){
cout<<abs(now);
}else if(abs(now)&&i==0){
cout<<abs(now);
}
//x项
if(i>1){
cout<<"x^"<<i;
}else if(i==1){
cout<<"x";
}
}
}
return 0;
}