1108 Finding Average (20分)(第三测试点踩坑3小时)

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 Xis the input. Then finally print in a line the result: The average of K numbers is Y where K is 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

神坑,没有仔细读题,当只有一个合法数时,printf的不是numbers,而是number,所以,务必分类输出!!

法一:

#include<iostream>
#include<cmath>
#include<algorithm>
#include<cctype>
#include<cstring>
#include<cstdlib>
using namespace std;

bool is_legal(char c[100]){

    double num = atof(c);
    if(num > 1000.0 || num < -1000.0){
        return false;
    }
    char b[100];
    sprintf(b, "%.2lf", num);
    for(int i = 0; i < strlen(c) ; i++){
        if(c[i] != b[i]){
            return false;
        }
    }
    return true;
}

int main(){

    int n;
    cin >> n;
    double num_sun = 0;
    int cnt = 0;
    for(int i = 0; i < n; i++){
        char c[100];
        cin >> c;
        if(is_legal(c)){
            double num = atof(c);       
            cnt++;
            num_sun += num;

        }else
        {
            printf("ERROR: %s is not a legal number\n", c);
        }
        
        

    }
    if(cnt == 1){

        printf("The average of 1 number is %.2f\n", num_sun);


    }else if(cnt > 1)
    {
        printf("The average of %d numbers is %.2lf\n", cnt, num_sun * 1.0 / cnt);
    }else
    {
        printf("The average of 0 numbers is Undefined\n");
    }
    

    return 0;
}

法二:

#include<iostream>
#include<cmath>
#include<algorithm>
#include<cctype>
#include<cstring>
#include<cstdlib>
using namespace std;

bool is_legal(string s){
    int cnt = 0;
    for(int i = 0; i < s.length(); i++){
        

        if(((s[i] < '0' || s[i] > '9') && s[i] != '-' && s[i] != '.')){

            return false;
        }
            

        if((s[i] == '-' && i != 0)){
        
            return false;
        }
        if(s[i] == '.'){
            cnt++;
        }
        
    }
    
    if(cnt > 1){
        
        return false;
    }else if(stod(s) > 1000.0 || stod(s) < -1000.0)
    {
        

        return false;
    }
    

    
    if(cnt == 1){

        if((s.length() - s.find('.')) > 3)
            return false;

    

    }

    
    return true;
}

int main(){

    int n;
    cin >> n;
    double num_sun = 0;
    int cnt = 0;
    for(int i = 0; i < n; i++){
        string s;
        cin >> s;
        if(is_legal(s)){


            double num = stod(s);
           
            cnt++;
            num_sun += num;
           
            
            

        }else
        {
            printf("ERROR: %s is not a legal number\n", s.c_str());
        }
        
        

    }
    if(cnt == 1){

        printf("The average of 1 number is %.2f\n", num_sun);


    }else if(cnt > 1)
    {
        printf("The average of %d numbers is %.2lf\n", cnt, num_sun * 1.0 / cnt);
    }else
    {
        printf("The average of 0 numbers is Undefined\n");
    }
    

    return 0;
}
发布了86 篇原创文章 · 获赞 15 · 访问量 1122

猜你喜欢

转载自blog.csdn.net/zbchenchanghao/article/details/104151079