洛谷P1067 多项式输出
..
題目描述
一元nn次多項式可用如下的表達式表示:
f(x)=a_nx^n+a_{n-1}x^{n-1}+\cdots +a_1x+a_0,a_n\ne 0f(x)=an?xn+an?1?xn?1+?+a1?x+a0?,an?≠0
其中,a_ix^iai?xi稱為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+1n?i+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 1000≤n≤100,-100 \le?100≤系數\le 100≤100
..
?
?
題解:這題真是口區心心。。。
一開始以為很簡單。后來從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 多项式输出的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 动态代理之: com.sun.proxy
- 下一篇: 2019第一次作业
