?题目就不贴了,仔细说说其中的几个要点,因为没有提供具体的测试点,解答者如果只看3 4 -5 2 6 1 -2 0这个输入样例所以容易踩坑。
1.求导是最简单的部分,系数乘指数,指数减一,再把这两个数字输出就好了,所有指数不为0的输入项直接这么处理就好了。
2.如果指数为0,需要根据该项所在的位置进行判断,因为以指数递降方式输入(这是题目中比容易被忽略的提示),所以如果输入的第一项指数为0,则直接输出0 0跳出循环就好,因为后面也不会有其他数据了;如果指数为0项前有其他项,则该项不输出,对应的就是样例最后-2 0这对数据,直接忽略不进行处理。
3.指数系数同为0,即题目中的“零多项式”,这种情况其实不需要对系数进行特殊判断,因为同理,0 0只会是单独出现的一对数据,输出也是0 0就可以了。
4.最后就是输出空格的处理,这个简单判断一下就好,第一项不加空格,之后的指数非0项前面加空格。
最后贴一下代码,当然还有很多可以优化的,另外我这个代码自己环境编译没问题,pat上运行测试居然会提示内存超限,好在不影响最后提交,也挺神秘的。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
vector <int> rua;
while (1)
{
cin >> n;
rua.push_back(n);
if (cin.get() == '\n')//以回车为信号,停止输出
break;
}
int len = rua.size();
for (int i=0;i < len;i+=2)
{
if (rua.at(i+1) == 0)
{
if (i == 0)//对第一项指数为0的进行特殊处理
{
cout << "0 0";
}
break;//其他情况跳出循环不输出
}
else
{
if (i == 0)
cout << rua.at(i) * rua.at(i+1) << " " << rua.at(i+1) - 1;//第一项前不加空格
else
cout << " " << rua.at(i) * rua.at(i+1) << " " << rua.at(i+1) - 1;
}
}
return 0;
}
最后附上个人的一些测试用例,希望帮到卡在这题的同学
0 0
1 0
2 1 2 0
2 2?2 1
3?2 3 1 3 0
|