1010 一元多项式求导 (25 分)
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0
。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
题记:
这道题看起来挺简单,开两个数组(或者一个结构体),一个表示系数,一个表示指数就做出来了,但是小坑挺多,改了很多次才通过所有的测试样例。需要注意以下几点:
1.“零多项式”,输入为“0 0”,需要输出“0 0”;
2.求导后的系数最大为1000000,int就够了。
3.控制空格的输出。有两种方法:①最后一项后面不输出空格,之前的项输出后都输出一个空格。②第一项前面不输出空格,之后的输出前面都加个空格。
C++程序如下:
#include <iostream>
using namespace std;
struct {
int x, y;
} a[1001];
int main() {
int n = 0, f = 0;
while (cin >> a[n].x >> a[n].y) {
n++;
}
for (int i = 0; i < n; i++) {
if (a[i].y != 0) {
if (i){
cout << " ";
}
cout << a[i].x * a[i].y << ' ' << a[i].y - 1;
f = 1;
}
}
if (f == 0) //零多项式的情况
cout << "0 0";
cout << endl;
return 0;
}
ps:我自己写的代码有一个测试样例通不过,不知道哪里错了,以上代码借鉴自1010 一元多项式求导 (25 分),输出部分有改动。我的代码如下,请大佬们指教。
#include <iostream>
#include <cstring>
using namespace std;
int main(void){
int count=0, a, b, b_max;
cin >> a >> b;
if(a==0 && b==0){
cout << "0 0";
}else{
int m[b+1], n[b+1];
for(int i=0; i<=b+1; i++){
m[i] = 0;
n[i] = 0;
}
m[b] = a;
n[b] = 1;
b_max = b;
while(cin >> a >> b){
m[b] = a;
n[b] = 1;
}
for(int i=b_max; i>0; i--){
if(n[i]){
if(i != b_max){
cout << " ";
}
cout << i*m[i] << " " << i-1;
}
}
}
return 0;
}