题目简述
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)
输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
思路
本题有一个小坑,即“输出格式”的最后一句,它的意思是如果输入的第一组数中指数是0时,必须输出0 0。
C++代码样例
#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <functional>
#include <map>
using namespace std;
int main(void)
{
int i=0;
int array_count = 0;
int val[1005] = {0};
vector<int> vc1,vc2;
vector< pair<int,int> > vc3;
while(1)
{
if(i>1)
{
if(val[i-1]==0 && i%2==0)
{
break;
}
}
scanf("%d",&val[i]);
i++;
}
array_count = i;
for(i=0; i<array_count; i+=2)
{
vc1.push_back(val[i]);
vc2.push_back(val[i+1]);
}
for(i=0; i<vc1.size(); i++)
{
if(vc1.size()==1 && vc2.size()==1 && vc2[0]==0)
{
vc3.push_back(pair<int,int>(0,0));
break;
}
vc3.push_back(pair<int,int>(vc1[i]*vc2[i],vc2[i]-1));
}
for(i=0; i<vc3.size(); i++)
{
if(vc3[i].second >= 0)
{
printf("%d %d",vc3[i].first,vc3[i].second);
if(vc3.size()>1)
{
if(vc3[i+1].second>=0 && i!=vc3.size()-1)
{
printf(" ");
}
}
}
}
return 0;
}