您的位置:首页 > 编程语言 > C语言/C++

C++ PAT 甲级1108 Finding Average (20分)

2020-04-20 16:38 459 查看
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;
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
qq_42344132 发布了71 篇原创文章 · 获赞 0 · 访问量 500 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: