欢迎访问 如意编程网!

如意编程网

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

洛谷P1067 多项式输出

发布时间:2024/7/5 编程问答 0 豆豆
如意编程网 收集整理的这篇文章主要介绍了 洛谷P1067 多项式输出 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

..

题目描述

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

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

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

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

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

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

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

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

  • 输入输出格式

    输入格式:

     

    输入共有 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("\n"); 94 return 0; 95 }

     

    转载于:https://www.cnblogs.com/greenaway07/p/10969411.html

    总结

    以上是如意编程网为你收集整理的洛谷P1067 多项式输出的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得如意编程网网站内容还不错,欢迎将如意编程网推荐给好友。