洛谷--P1067 多项式输出
題目描述
一元nn次多項式可用如下的表達式表示:
其中,a_ix^iai?xi稱為ii次項,a_iai??稱為ii次項的系數。給出一個一元多項式各項的次數和系數,請按照如下規定的格式要求輸出該多項式:
多項式中自變量為xx,從左到右按照次數遞減順序給出多項式。
多項式中只包含系數不為00的項。
如果多項式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+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
?
得分:60
第一次因為沒有加對1次的判斷 得了50分
#include <iostream> using namespace std;int n; int xishu[100+10]; int cnt = 0; int main() {scanf("%d", &n);for(int i = n; i >= 0; i--){scanf("%d", &xishu[i]);}for(int i = n; i >= 0; i--){//特殊位置nif(i == n && ( (xishu[i] > 0 && xishu[i] != 1) || (xishu[i] < 0 && xishu[i] != -1))){cnt++;printf("%dx^%d", xishu[i], i);continue;}else if(i == n && xishu[i] == 0) continue;else if(i == n && xishu[i] == 1){cnt++;printf("x^%d",i);continue;}else if(i == n && xishu[i] == -1){cnt++;printf("-x^%d",i);continue;}//特殊位置0if(i == 0 && (xishu[i] > 0 || xishu[i] < 0)){if(cnt != 0){if(xishu[i] > 0) printf("+%d",xishu[i]);else printf("%d", xishu[i]);}else if(cnt == 0){if(xishu[i] > 0) printf("%d",xishu[i]);else printf("%d", xishu[i]);}}else if(i == 0 && xishu[i] == 0) continue;//特殊位置1if(i == 1 && xishu[i] == 0) continue;else if( i == 1 && ((xishu[i] > 0 && xishu[i] != 1) || (xishu[i] < 0 && xishu[i] != -1))){if(cnt != 0){cnt++;if(xishu[i] > 0) printf("+%dx",xishu[i]);else printf("%dx", xishu[i]);}else if(cnt == 0){cnt++;if(xishu[i] > 0) printf("%dx",xishu[i]);else printf("%dx", xishu[i]);}}else if(i == 1 && xishu[i] == 1){if(cnt != 0){cnt++;printf("+x");}else if(cnt == 0){cnt++;printf("x");}continue;}else if(i == 1 && xishu[i] == -1){cnt++;printf("-x");continue;}//其他位置if((i!=0 && i!=n) && xishu[i] == 0) continue;else if((i!=0 && i!=n) && ((xishu[i] > 0 && xishu[i] != 1) || (xishu[i] < 0 && xishu[i] != -1))){if(cnt != 0){cnt++;if(xishu[i] > 0) printf("+%dx^%d",xishu[i],i);else printf("%dx^%d", xishu[i],i);}else if(cnt == 0){cnt++;if(xishu[i] > 0) printf("%dx^%d",xishu[i],i);else printf("%dx^%d", xishu[i],i);}}else if((i!=0 && i!=n) && xishu[i] == 1){if(cnt != 0){cnt++;printf("+x^%d",i);}else if(cnt == 0){cnt++;printf("x^%d",i);}continue;}else if((i!=0 && i!=n) && xishu[i] == -1){cnt++;printf("-x^%d", i);continue;}}return 0; }?
別人AC代碼:
作者:洛谷--cplusplus
#include<bits/stdc++.h> using namespace std; int main(){int n,a;cin>>n;for(int i=n;i>=0;i--){cin>>a;if(a){ 判0系數if(i!=n&&a>0)cout<<"+"; 根據正負、是否為最高此項決定加號if(abs(a)>1||i==0)cout<<a; 輸出系數(系數不為正負1或指數為0)if(a==-1&&i)cout<<"-"; -1系數特判,常數項已特判if(i>1)cout<<"x^"<<i; 二次及以上輸出指數if(i==1)cout<<"x"; 一次項}} }嗚嗚嗚,我太菜了。別人短短幾行代碼解決的事情,我要一百行還解決不了....
總結
以上是生活随笔為你收集整理的洛谷--P1067 多项式输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷——P1540 机器翻译
- 下一篇: 洛谷—P1307 数字反转