PAT 乙级 1010

题目

    题目地址:PAT 乙级 1010

 

思路

    首先一个问题就是审题不清,导致代码返工了很多次,最后还没写对;

    其次对于这道题来说每次输入一组数据之后就可以输出结果,太过机械地想要套用题目给出的输出样例,把简单的代码复杂化了;

    最后注意“零多项式”的指数和系数都是0,但是表示为“0 0”这个问题。

 

代码

#include <iostream>
using namespace std;

int main() {
    int x = 0, y = 0;
    bool flag = false;
    while (cin >> x >> y) {
        if (x * y) {
            if (flag)
                cout << ' ';
            else
                flag = true;
            cout << x * y << ' ' << y - 1;
        }
    }
    if (!flag)
        cout << "0 0";

    return 0;
}

      这段代码思路的巧妙之处就在于使用了一个标记变量flag,有两点优势:1. 在代码构造过程中自然解决了题设中给出的输出格式的问题,将每一组输出之间的空格放在了”本次输出“之前,利用标记变量解决了第一组输出之前没有空格的问题;2. 无需其它的操作就可以解决零多项式输出的问题;

      下面来简单分析一下这段代码的思路,设置标记变量初值为false,输入第一组数据,若两者的乘积非零,进入操作,否则等待下一次输入;

      非零:对于第一组输入数据,因flag为false,则将flag置为true,输出第一组的结果;第二组输入,因flag为true,先输出一个空格,之后输出第二组的结果;第三组……

      为零:当之前存在输出,当前数据是常数项的一组,不进入while中的if结构,又因为这是最后一组输入,因此跳出循环,又不满足输出”0 0“的条件,因此结束程序,输出完毕;

                当输入本身就是零多项式,因为不满足while中的if条件,且这是唯一的输入,因此跳出循环,又因为flag仍然是初值false,所以满足输出”0 0“的条件,程序结束,输出完毕。

 

初版代码

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> num;
    while (true) {
        int tmp = 0;
        cin >> tmp;
        num.push_back(tmp);
        if (getchar() == '\n')
            break;
    }
    num.pop_back();
    int tmp = num[num.size() - 1];
    if (tmp == 0)
        cout << 0 << ' ' << 0;
    else {
    num.pop_back();
    vector<int>::iterator it;
    for (it = num.begin(); it != num.end();) {
        if (*it == 0) {
            it = num.erase(it);
            it = num.erase(it);
        }
        else
            ++it;
    }
    bool flag = true;
    for (int i = 0; i < num.size(); i++) {
        if (flag) {
            cout << num[i] * num[i + 1];
            flag = false;
        }
        else {
            cout << num[i] - 1;
            flag = true;
        }
        if (i != num.size() - 1)
            cout << ' ';
    }
    cout << endl;
    }
    return 0;
}

     这段代码在测试中并未通过,但因为是初版代码,所以贴在这里供以后参考。

 

posted @ 2018-07-21 16:16  moujun  阅读(882)  评论(0编辑  收藏  举报