标签:blog io os sp for on 2014 log amp
/* 一元多项式求导 (25) 设计函数求一元多项式的导数。 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。 数字间以空格分隔。 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数。 数字间以空格分隔,但结尾不能有多余空格。 注意“零多项式”的指数和系数都是0,但是表示为“0 0”。 输入样例: 3 4 -5 2 6 1 -2 0 即 3X^4 - 5X^2 + 6X - 2 输出样例: 12 3 -10 1 6 0 即 12X^3 - 10X + 6 - 0 导数: aX^n 的导数为 a*nX^(n-1),在本题中即输出 a*n n-1 常数的导数为 0 */ #pragma once #include<vector> #include<sstream> #include<iostream> #include<string> using namespace std; struct Item { int e; int n; }; void Input(vector<Item>&vec) { string line; Item it; int num; bool bN = true; getline(cin, line, '\n'); istringstream stream(line); while(stream >> num) { static int i = 0; if(bN) it.n = num; else it.e = num; if(++i%2==0) vec.push_back(it); bN = !bN; } } // 合并同类顶 void Comb(vector<Item>&a, vector<Item>&b) { int size = a.size(); int i; for(i = 0; i < size-1; ++i) { if(a[i].e == a[i + 1].e) { a[i+1].n += a[i].n; } else { if(a[i].n != 0) b.push_back(a[i]); } } // 最后漏掉的一个 if( a[i].n != 0) b.push_back(a[i]); } void Output(vector<Item>&vec) { int size = vec.size(); if( (size == 1 && vec[0].e == 0 && vec[0].n==0) || size == 0) { cout << "0 0" << endl; return; } for(int i = 0; i < size; ++i) { if(vec[i].e == 0) cout << '0'; else if(vec[i].e - 1 == 0) cout << vec[i].n; else { cout << vec[i].n * vec[i].e << ' '; cout << vec[i].e - 1; } if(i != size - 1) cout << ' '; } cout << endl; } void Run() { vector<Item>vec, der; Input(vec); Comb(vec, der); Output(der); } int main(void) { Run(); return 0; }
标签:blog io os sp for on 2014 log amp
原文地址:http://blog.csdn.net/mywsfxzxb/article/details/42012025