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 Y。number与numbers
#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; }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- PAT - 甲级 - 1108. Finding Average (20) ( 字符串处理 sscanf )
- PAT甲级 1108. Finding Average (20)
- 1108. Finding Average (20)-PAT甲级真题
- 【刷题】A1108 Finding Average-PAT甲级
- PAT 甲级 1108. Finding Average (20)
- PAT程序设计考题——甲级1079( Total Sales of Supply Chain ) C++实现
- PAT甲级——1121 Damn Single (C++的各种stl的使用)
- C++ PAT乙级 1064 朋友数 (20分)
- C++ PAT乙级1044 火星数字 (20分)
- PAT甲级 1058 A+B in Hogwarts (20分)
- C++ PAT乙级1063 计算谱半径 (20分)
- C++ PAT乙级 1043 输出PATest (20分)
- PAT甲级1108
- PAT甲题题解-1108. Finding Average (20)-字符串处理
- PAT程序设计考题——甲级1045 (最长公共子序列) C++实现
- PAT程序设计考题——甲级1003(Emergency ) C++实现
- PAT程序设计考题——甲级1058(A+B in Hogwarts ) C++实现
- C++ PAT乙级1042 字符统计 (20分)
- PAT甲级1108
- PAT程序设计考题——甲级1068 (背包问题) C++实现