PAT 乙级 (Basic Level) Practice 1010 一元多项式求导 踩坑记录+解题思路

PAT 乙级 (Basic Level) Practice 1010 一元多项式求导 踩坑记录+解题思路,第1张

PAT 乙级 (Basic Level) Practice 1010 一元多项式求导 踩坑记录+解题思路

 题目就不贴了,仔细说说其中的几个要点,因为没有提供具体的测试点,解答者如果只看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 
#include 
using namespace std;

int main()
{
    int n;
    vector  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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5520645.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存