美文网首页
PAT 甲级 刷题日记|A 1108 Finding Avera

PAT 甲级 刷题日记|A 1108 Finding Avera

作者: 九除以三还是三哦 | 来源:发表于2021-08-30 08:06 被阅读0次

    单词积累

    real number 实数

    In case 万一;假使

    思路

    字符串问题,测试数据也非常简单,但代码写的又臭又长是不能忍的

    测试点2答案错误原因:题面指出如果只有一个合法数字,输出numbers的时候不加s,即为number。

    柳神的代码就非常简洁了,技巧性很高。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    int N;
    const int maxn = 103;
    string inpu[maxn];
    vector<double> ans;
    
    bool check(string input) {
        double ma = 0;
        int i = 0;
        if (input[0] == '+' || input[0] == '-') i++;
        if(input[i] <= '9' && input[i] >= '0') {
            for (;i < input.size(); i++) {
                if (input[i] <= '9' && input[i] >= '0') {
                    ma *= 10;
                    ma += input[i] - '0'; 
                } else if (input[i] == '.') {
                    break;
                } else {
                    return false;
                }
            }
            if (i != input.size()) {
                double xiao = 0;
                for (int j = input.size() - 1; j > i; j--) {
                    if (input[j] <= '9' && input[j] >= '0') {
                        xiao += input[j] - '0'; 
                        xiao *= 0.1;
                    } else {
                        return false;
                    }
                }
                if (input.size() - 1 - i > 2) {
                    return false;
                }
                ma += xiao;
            }
            if (ma > 1000) return false;
            if (input[0] == '-') ma *= -1;
            ans.push_back(ma);
            return true;
        } else {
            return false;
        }
    }
    
    int main() {
        cin>>N;
        for (int i = 0; i < N; i++) {
            cin>>inpu[i];
            if (check(inpu[i]) == false) {
                cout<<"ERROR: "<<inpu[i]<<" is not a legal number"<<endl;
            }
        }
        if (ans.size() == 0) cout<<"The average of 0 numbers is Undefined"<<endl;
        else if (ans.size() == 1){
            printf("The average of 1 number is %.2f", ans[0]);
        }else {
            double answer = 0;
            for (int i = 0; i < ans.size(); i++) {
                answer += ans[i];
            }
            answer /= ans.size();
            printf("The average of %d numbers is %.2f", ans.size(), answer);
        }
    }
    

    相关文章

      网友评论

          本文标题:PAT 甲级 刷题日记|A 1108 Finding Avera

          本文链接:https://www.haomeiwen.com/subject/wdwtiltx.html