1010. 一元多项式求导 (25)
题目:
设计函数求一元多项式的导数。(注: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
思路:
- 开两个数组,一个数组存输入,一个数组存结果
int poly[1005]; //poly[i]存储输入的多项式指数为i的系数
int ans[1005]; //ans[i]存储结果的多项式指数为i的系数
- 使用while……!=EOF来读入系数和指数
- 由1开始遍历,将求导后结果写入结果数组
- 由MAX开始遍历,将结果数组按格式输出
代码:
version1.0
/**
* @tag PAT_B_1010
* @authors R11happy (xushuai100@126.com)
* @date 2016-07-23 17:28:17-17:56
* @version 1.0
* @Language C++
* @Ranking 180/3621
*/
#include <cstdio>
#include <cstring>
#include <cmath>
int poly[1005]; //poly[i]存储输入的多项式指数为i的系数
int ans[1005]; //ans[i]存储结果的多项式指数为i的系数
int main()
{
int epo, cof;
int cnt = 0;
int Max = 1;
while (scanf("%d%d", &cof, &epo) != EOF)
{
poly[epo] = cof;
}
for (int i = 1; i <= 1000; i++)
{
if (poly[i])
{
if (Max < i)
Max = i;
ans[i - 1] = i*poly[i];
}
}
printf("%d %d", ans[Max - 1], Max - 1);
for (int i = Max - 2; i >= 0; i--)
{
if (ans[i])
{
printf(" %d %d", ans[i], i);
}
}
printf("\n");
return 0;
}
version2.0
/**
* @tag PAT_B_1010
* @authors R11happy (xushuai100@126.com)
* @date 2016-07-23 19:00:17-19:08
* @version 2.0
* @Language C++
* @Ranking 180/3621
*/
#include <cstdio>
#include <cstring>
#include <cmath>
int main()
{
int epo, cof;
bool flag = false;
while(scanf("%d%d", &cof, &epo) != EOF)
{
if(cof*epo)
{
if(flag)
printf(" ");
else
flag = true;
printf("%d %d", cof*epo, epo-1);
}
}
if(!flag)
printf("0 0");
}
收获:
- while……!=EOF格式读数据如果一次性读完再操作在编译运行的时候可能会死循环,但是放到OJ上测试没问题,可以先编写简单测试代码测试
- 输出时要注意考虑特殊情况,比如求导后没有任何非零项,需要输出0 0等等
- 能最快想到并且测试通过的方法就是好方法