zoukankan      html  css  js  c++  java
  • PAT 1054 求平均值

    https://pintia.cn/problem-sets/994805260223102976/problems/994805272659214336

    本题的基本要求非常简单:给定N个实数,计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是[-1000,1000]区间内的实数,并且最多精确到小数点后2位。当你计算平均值的时候,不能把那些非法的数据算在内。

    输入格式:

    输入第一行给出正整数N(<=100)。随后一行给出N个实数,数字间以一个空格分隔。

    输出格式:

    对每个非法输入,在一行中输出“ERROR: X is not a legal number”,其中X是输入。最后在一行中输出结果:“The average of K numbers is Y”,其中K是合法输入的个数,Y是它们的平均值,精确到小数点后2位。如果平均值无法计算,则用“Undefined”替换Y。如果K为1,则输出“The average of 1 number is Y”。

    输入样例1:

    7
    5 -3.2 aaa 9999 2.3.4 7.123 2.35
    

    输出样例1:

    ERROR: aaa is not a legal number
    ERROR: 9999 is not a legal number
    ERROR: 2.3.4 is not a legal number
    ERROR: 7.123 is not a legal number
    The average of 3 numbers is 1.38
    

    输入样例2:

    2
    aaa -9999
    

    输出样例2:

    ERROR: aaa is not a legal number
    ERROR: -9999 is not a legal number
    The average of 0 numbers is Undefined

    代码:
    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn = 1e5 + 10;
    char s[maxn];
    double num[1111];
    
    int main() {
        int T;
        scanf("%d", &T);
        double sum = 0;
        int dot = 0;
        for(int j = 1; j <= T;j ++) {
            scanf("%s", s);
            int len = strlen(s);
            bool flag = true;
            int cnt = 0, temp, ans = 0;
            for(int i = 0; i < len; i ++) {
                if(!((s[i] >= '0' && s[i] <= '9') || s[i] == '-' || s[i] == '.' || s[i] == '+'))
                    flag=false;
    /*
                if(s[0]=='.'||s[len-1]=='.')
                    flag=false;
    */
                if(s[i]=='-'&&i>0)
                    flag=false;
    
                if(s[0]=='-'&&len==1)
                    flag=false;
    
                if(s[i]=='+'&&i>0)
                    flag=false;
    
                if(s[0]=='+'&&len==1)
                    flag=false;
    
                if(s[i] == '.') {
                    cnt ++;
                    if(cnt > 1)
                        flag = false;
                    else if(cnt == 1) {
                        temp = i;
                        if(len - temp > 3)
                            flag = false;
                    }
                }
            }
            if(flag) {
                ans ++;
                num[ans] = atof(s);
                for(int i = 1; i <= ans; i ++) {
                    if(num[i] >= -1000 && num[i] <= 1000) {
                        dot ++;
                        sum += num[i];
                    }
                    else flag = false;
                }
            }
            if(!flag)
                printf("ERROR: %s is not a legal number
    ", s);
        }
        if(dot == 1)
            printf("The average of %d number is %.2lf
    ", dot, sum/dot);
        else if(dot>1)
            printf("The average of %d numbers is %.2lf
    ", dot, sum/dot);
        else
            printf("The average of 0 numbers is Undefined
    ");
        return 0;
    }
    

      

  • 相关阅读:
    tableView//collectionView加载时的动画
    关于collectionView和tableView的两种cell的出列方法的区别
    缓存的实现,主要是图片缓存整理
    android context获取目录详解
    Android网络传输中必用的两个加密算法:MD5 和 RSA 及Base64加密总结
    listview 与 button 焦点 在item添加下列属性
    VScode 安装必备
    centos7 安装docker
    1290
    MySQL“Another MySQL daemon already running with the same unix socket” 报错信息处理
  • 原文地址:https://www.cnblogs.com/zlrrrr/p/9380123.html
Copyright © 2011-2022 走看看