zoukankan      html  css  js  c++  java
  • 【刷题-PAT】A1108 Finding Average (20 分)

    1108 Finding Average (20 分)

    The basic task is simple: given N real numbers, you are supposed to calculate their average. But what makes it complicated is that some of the input numbers might not be legal. A legal input is a real number in [−1000,1000] and is accurate up to no more than 2 decimal places. When you calculate the average, those illegal numbers must not be counted in.

    Input Specification:

    Each input file contains one test case. For each case, the first line gives a positive integer N (≤100). Then N numbers are given in the next line, separated by one space.

    Output Specification:

    For each illegal input number, print in a line ERROR: X is not a legal number where X is the input. Then finally print in a line the result: The average of K numbers is Y where Kis the number of legal inputs and Y is their average, accurate to 2 decimal places. In case the average cannot be calculated, output Undefined instead of Y. In case K is only 1, output The average of 1 number is Y instead.

    Sample Input 1:

    7
    5 -3.2 aaa 9999 2.3.4 7.123 2.35
    

    Sample Output 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
    

    Sample Input 2:

    2
    aaa -9999
    

    Sample Output 2:

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

    分析:使用sscanf()和sprintf()函数即可

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<string>
    #include<unordered_map>
    #include<set>
    #include<queue>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int main(){
        #ifdef ONLINE_JUDGE
        #else
        freopen("input.txt", "r", stdin);
        #endif // ONLINE_JUDGE
        int n = 0;
        scanf("%d", &n);
        int cnt = 0;
        double sum = 0, num;
        for(int i = 0; i < n; ++i){
            char str[100], t[100];
            scanf("%s", str);
            sscanf(str, "%lf", &num);
            sprintf(t, "%.2f", num);
            bool flag = true;
            //写入失败时,写入的地方存的还是之前的内容,所以要比较
            for(int i = 0; i < strlen(str); ++i){
                if(str[i] != t[i])flag = false;
            }
            if(flag == false || abs(num) > 1000){
                printf("ERROR: %s is not a legal number
    ", str);
            }else{
                cnt++;
                sum += num;
            }
        }
        if(cnt == 0){
            printf("The average of 0 numbers is Undefined
    ");
        }else if(cnt == 1){
            printf("The average of 1 number is %.2lf
    ", sum);
        }else{
            printf("The average of %d numbers is %.2lf
    ", cnt, sum / cnt);
        }
        return 0;
    }
    
  • 相关阅读:
    DBCP连接池使用
    odoo10学习笔记十七:controller
    odoo10学习笔记十六:定时任务
    odoo10学习笔记十五:仪表板
    odoo10学习笔记十三:qweb报表
    odoo10学习笔记十二:web controller
    odoo10学习笔记十一:视图综述
    odoo10学习笔记十:Actions
    odoo10学习笔记九:Odoo10 API
    odoo10学习笔记七:国际化、报表
  • 原文地址:https://www.cnblogs.com/vinnson/p/10843041.html
Copyright © 2011-2022 走看看