NOIP2009多项式输出

首先这是我写的第一个题解,不知道多年以后,当我偶然看到这个题解,我是否会回想起来我在今天开启了(应该算是非独自摸索而是跟课开始学算法的)的一段旅程。

链接:https://ac.nowcoder.com/acm/problem/16622
来源:牛客网

题目描述
一元n次多项式可用如下的表达式表示:
f (x) = anxn+ an-1xn-1 + ... + a1x + a0,a0≠0
其中,aixi 称为i 次项,ai 称为i次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:
1. 多项式中自变量为x,从左到右按照次数递减顺序给出多项式。

2. 多项式中只包含系数不为0的项。

3. 如果多项式n次项系数为正,则多项式开头不出现“+”号,如果多项式 n 次项系数为负,则多项式以“-”号开头。

4. 对于不是最高次的项,以“+”号或者“-”号连接此项与前一项,分别表示此项系数为正或者系数为负。紧跟一个正整数,表示此项系数的绝对值(如果一个高于0 次的项,其系数的绝对值为1,则无需输出1)。如果x的指数大于1,则接下来紧跟的指数部分的形式为“x^b”,其中b为x的指数;如果x的指数为1,则接下来紧跟的指数部分形式为“x”;如果x的指数为0,则仅需输出系数即可。

5. 多项式中,多项式的开头、结尾不含多余的空格。

废话不多说了毕竟不是为了提升写这个题解就是浪费自己时间直接看题:

这是一道很基础的模拟题,面对这一类型的题首先思维逻辑要清晰,先分析输出的大概可以分成几个部分,再在这个基础上分析可以分成多少种情况,对于分情况的这个思想当然也是老生常谈了,就是要保证不重不漏。
老实说第一次拿到这种题我是有点茫然的,还是听了讲解以后才知道要分开系数和次数。等我写题解的时候第二次仔细审题才会体会到这样处理的原因。接收数据时候用一个数组来存储系数,因为次数部分是要根据题意和系数的要求来确定的,所以只要存储系数就可以了。

我先给出代码方便理解:
#include<bits/stdc++.h>
using namespace std;
int a[110];
int main(){
    int n;
    cin>>n;
    for(int i=n;i>=0;i--){
        scanf("%d",&a[i]);
    }
    for(int i=n;i>=0;i--){
        if(a[i]==0)continue;
        if(i==n){
            if(a[i]<0)cout<<"-";
        }
        else{
            if(a[i]<0)cout<<"-";
            if(a[i]>0)cout<<"+";        
        }
        if((a[i] == 1|| a[i] == -1)&& i!=0) ;
        else cout<<abs(a[i]);
        
        if(i==0)continue;
        else if(i==1)cout<<"x";
        else cout<<"x^"<<i;
    }
}
可以看到不管是存入数据还是遍历数据时候for循环都是从n到0(次数)。这是输出时候从左往右是从高次数到低次数

搞好这一部分后再回顾题意来分析所有的情况,以下是有用的信息:
1.多项式中只包含系数不为0的项:
说明系数为0时候直接不用输出,进入下一轮循环;

2.如果多项式n次项系数为正,则多项式开头不出现“+”号,如果多项式 n 次项系数为负,则多项式以“-”号开头:
这一部分说明对于遍历系数时候加入对系数为正数或是负数的判断,对于负数的处理也很简单,直接输出'-'号后对于系数取绝对值即可。

3.对于不是最高次的项,以“+”号或者“-”号连接此项与前一项,分别表示此项系数为正或者系数为负。紧跟一个正整数,表示此项系数的绝对值(如果一个高于0 次的项,其系数的绝对值为1,则无需输出1)。如果x的指数大于1,则接下来紧跟的指数部分的形式为“x^b”,其中b为x的指数;如果x的指数为1,则接下来紧跟的指数部分形式为“x”;如果x的指数为0,则仅需输出系数即可:
说明:判断次数不是0此时候如果abs(系数)是1则忽略掉,只输出次数部分;是0次时候则只输出系数部分忽略次数部分
并且次数为1时不用输出^b;

在写代码的时候先对于正负号分情况讨论,再对系数绝对值来分情况讨论,最后再对次数部分分情况讨论。
这个分段输出的思想非常重要,不然会因为分太多情况而把自己转进去(亲身经历)
全部评论

相关推荐

快刀斩offer:干测试,项目组就我一个测试,准备在职考研跑路了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务