PAT乙級B1010- 一元多項式求導 (25)(25 分)
阿新 • • 發佈:2019-02-08
設計函式求一元多項式的導數。(注:x^n^(n為整數)的一階導數為n*x^n-1^。)
輸入格式:以指數遞降方式輸入多項式非零項係數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。
輸出格式:以與輸入相同的格式輸出導數多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。注意“零多項式”的指數和係數都是0,但是表示為“0 0”。
輸入樣例:
3 4 -5 2 6 1 -2 0
輸出樣例:
12 3 -10 1 6 0
思路:
1.定義一個結構體儲存多項式。
struct node{ int exp,coe; node(int coe=0,int exp=0):coe(coe),exp(exp){} }Node;
注意:如果是自己宣告的建構函式(如上),一定要加上預設建構函式(int coe=0,int exp=0),否則系統會報錯如下。
struct node{
int exp,coe;
node(int coe,int exp):coe(coe),exp(exp){}
}Node;
這種情況編譯顯示:
2.用vector儲存多項式,因為輸入是按照指數遞減輸入的,所以輸出預設也是遞減,不用自己在排序。
3.資料的讀入使用while(scanf("%d",&coe)!=EOF)進行判斷。
4.定義一個布林型flag標記是否有資料輸出,如果沒有資料輸出,最後額外printf("0 0");
參考程式碼:
#include<cstdio> #include<vector> using namespace std; struct node{ int exp,coe; node(int coe=0,int exp=0):coe(coe),exp(exp){} }Node; vector<node> st; int main() { int exp,coe; bool flag=false; while(scanf("%d",&coe)!=EOF) { scanf("%d",&exp); if(exp!=0) { st.push_back(node(coe*exp,exp-1)); flag=true; } } for(int i=0;i<st.size();i++) { printf("%d %d",st[i].coe,st[i].exp); if(i<st.size()-1) printf(" "); } if(flag==false) printf("0 0\n"); return 0; }
優化:
思路:
1。直接使用兩個變數coe,exp進行輸入和輸出操作,不再單獨定義結構體儲存資料。
參考程式碼:
#include<cstdio>
int main()
{
int exp,coe;
bool flag=false;
scanf("%d%d",&coe,&exp);
if(exp!=0) {
printf("%d %d",coe*exp,exp-1);
flag=true;
}
while(scanf("%d",&coe)!=EOF)
{
scanf("%d",&exp);
if(exp!=0)
{
printf(" %d %d",coe*exp,exp-1);
flag=true;
}
}
if(flag==false) printf("0 0\n");
return 0;
}
優化:
1.資料讀入與判斷方式,繼續精簡。
參考程式碼:
#include<cstdio>
int main()
{
int exp,coe;
bool flag=false;
while(scanf("%d %d",&coe,&exp)!=EOF)
{
if(exp!=0)
{
if(flag) printf(" ");
printf("%d %d",coe*exp,exp-1);
flag=true;
}
}
if(flag==false) printf("0 0\n");
return 0;
}