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

2021-08-30  本文已影响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);
    }
}
上一篇下一篇

猜你喜欢

热点阅读