• 洛谷P1067 多项式输出


    ..

    题目描述

    一元nn次多项式可用如下的表达式表示:

    f(x)=a_nx^n+a_{n-1}x^{n-1}+cdots +a_1x+a_0,a_n e 0f(x)=anxn+an1xn1++a1x+a0,an0

    其中,a_ix^iaixi称为ii次项,a_iai 称为ii次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:

    1. 多项式中自变量为xx,从左到右按照次数递减顺序给出多项式。

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

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

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

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

    输入输出格式

    输入格式:

    输入共有 22 行

    第一行11 个整数,nn,表示一元多项式的次数。

    第二行有 n+1n+1个整数,其中第ii个整数表示第n-i+1ni+1 次项的系数,每两个整数之间用空格隔开。

    输出格式:

    输出共 11 行,按题目所述格式输出多项式。

    输入输出样例

    输入样例#1: 复制
    5 
    100 -1 1 -3 0 10
    输出样例#1: 复制
    100x^5-x^4+x^3-3x^2+10
    输入样例#2: 复制
    3 
    -50 0 0 1 
    
    输出样例#2: 复制
    -50x^3+1 
    

    说明

    NOIP 2009 普及组 第一题

    对于100%数据,0 le n le 1000n100,-100 le100≤系数le 100100

    ..

    题解:这题真是口区心心。。。

    一开始以为很简单。后来从50->40--40--40分,最后一口气AC了.

    自己敲几个 01 01 11 00之类的数据调试即可。

    看了题解说倒数第二项因为是一次方所以才知道要特殊处理orz

    而且,更坑的是,它未必就一定是 第一项最高次没有符号,而是第一次出现的那一项没有加号,所以用nosign变量记录是否出现了第一个项,同时如果全是零,也要特判输出0.

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cmath>
     4 #include <stdio.h>
     5 #include <cstring>
     6 #include <string>
     7 #include <cstdlib>
     8 #include <queue>
     9 #include <stack>
    10 #include <set>
    11 #include <vector>
    12 #include <map>
    13 #include <list>
    14 #include <iomanip>
    15 #define maxn 10000
    16 //#include <>
    17 using namespace std;
    18 int main()
    19 {
    20     int n,x,sign=0,nosign=0;
    21     int last=0;
    22     scanf("%d",&n);
    23     for(int i=n;i>=0;i--)
    24     {
    25         nosign=0;
    26         scanf("%d",&x);
    27         if(i==n)
    28             last=x;
    29         else{
    30             if(last==0)
    31                 nosign=1;
    32             last=1;
    33         }
    34         if(x==0)
    35             {
    36                 sign++;
    37                 continue;
    38             }
    39         //头部:没有头符号,直接输出x和几次方 
    40         if(i==n){
    41             if(x==1||x==-1)
    42             {
    43                 if(x<0)
    44                     printf("-");
    45                 printf("x^%d",i);
    46             }
    47             else{
    48                 printf("%dx^%d",x,i);
    49             }    
    50             
    51         }
    52         //倒数第二项
    53         else if(i==1)
    54         {
    55             if(x==1||x==-1)
    56             {
    57                 if(x<0&&!nosign)
    58                     printf("-");
    59                 else if(x>0&&!nosign){
    60                     printf("+");
    61                 }
    62                 printf("x");
    63             }
    64             else{
    65                 if(x>0&&!nosign)
    66                     printf("+");
    67                 printf("%dx",x);
    68             }
    69         } 
          //中部
    70 else if(i!=0){ 71 if(x>0&&!nosign) 72 printf("+"); 73 if(x==1||x==-1) 74 { 75 if(x<0) 76 printf("-"); 77 printf("x^%d",i); 78 } 79 else{ 80 printf("%dx^%d",x,i); 81 } 82 83 } 84 //尾部:输出x。 85 else{ 86 if(x>0&&!nosign) 87 printf("+"); 88 printf("%d",x); 89 } 90 } 91 if(sign==n) 92 cout<<"0"; 93 printf(" "); 94 return 0; 95 }
  • 相关阅读:
    JavaWeb与JSP初识
    doT.js灵活运用之嵌入使用
    避免数据二次提交的处理方式
    Intellij Idea创建的第一个JavaWeb程序
    JavaWeb简单介绍
    Java网络编程初探
    windows下如何安装和启动MySQL
    PhpStorm配置svn时提示需要证书:authentication required的解决方法,总是弹出
    正则神器,RegexBuddy
    2-3 tree使用
  • 原文地址:https://www.cnblogs.com/greenaway07/p/10969411.html
Copyright © 2020-2023  润新知