C++ PAT 甲级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 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

坑:题目描述的 当合法个数为1时The average of 1 number is Y,大于1时The average of K numbers is Ynumbernumbers

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
using namespace std;
void print(string a[],int b,int c,double d)
{
    for(int i=0;i<b;i++)
    {
        cout<<"ERROR: "<<a[i]<<" is not a legal number"<<endl;
    }
    if(c==0)      cout <<"The average of 0 numbers is Undefined";
    else if(c==1) cout <<"The average of 1 number is "<<setiosflags(ios::fixed)<<setprecision(2)<<d;
    else          cout <<"The average of "<<c<<" numbers is "<<setiosflags(ios::fixed)<<setprecision(2)<<d;  
}
int Judge(string a,int len)
{
    int flag=1;
    int n=0,index=-3;
    for(int i=0;i<len;i++)
    {
        if(a[i]>='0' && a[i]<='9') continue;
        else if(a[i]==46)
        {
            n++;
            index=i;
            if(n==2 || index==0 || len-index>3)
            {flag=0;break;}
        }
        else if(a[0]==45) continue;
        else {flag=0;break;}
    }
    return flag;
}
int main()
{
    int N;
    cin >> N;
    string a[N];
    double d=0;
    int c=0,b=0;
    for(int i=0;i<N;i++)
    {
        string t;
        cin >> t;
        //判断
        int flag=Judge(t,t.length());
        if(flag==1)
        {
            istringstream in(t);
            double n;
            in >> n;
            if(n>=-1000 && n<=1000) {d+=n;c++;}
            else {a[b]=t;b++;}
        }
        else
        {
            a[b]=t;
            b++;
        }
    }
    d/=c;
    print(a,b,c,d);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值