PAT A1108. Finding Average (20/17)

来源:互联网 发布:php上传文件带进度条 编辑:程序博客网 时间:2024/06/06 04:57

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:
75 -3.2 aaa 9999 2.3.4 7.123 2.35
Sample Output 1:
ERROR: aaa is not a legal numberERROR: 9999 is not a legal numberERROR: 2.3.4 is not a legal numberERROR: 7.123 is not a legal numberThe average of 3 numbers is 1.38
Sample Input 2:
2aaa -9999
Sample Output 2:
ERROR: aaa is not a legal numberERROR: -9999 is not a legal numberThe average of 0 numbers is Undefined

#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<iostream>const int Max = 1000;using namespace std;int n;string S[Max];double num[Max];int ins=0;bool IsTrue(string s){if(s[0]=='-'){if(s[1]>='0'&&s[1]<='9'){int flag=0,k=-1;for(int i=1;i<s.size();i++){if(!(s[i]>='0'&&s[i]<='9'||s[i]=='.')){return false;}if(s[i]=='.'){if(flag==0){k=i;//找到.的位置}flag++;}if(flag>=2) {return false;}}if(k==-1)//不是小数{double ans=0;for(int i=1;i<s.size();i++){ans=ans*10+(s[i]-'0');}if(ans>1000)return false;else {num[ins++]=-1*ans;return true;}}else {if(s.size()-k-1>=3){return false;}else {double ans1=0,ans2=0;    for(int i=1;i<k;i++)    {    ans1=ans1*10+(s[i]-'0');    }for(int i=k+1;i<s.size();i++){ans2=ans2*10+(s[i]-'0');}if(s.size()-k-1==2) ans2=ans2/100;else ans2=ans2/10;ans1=ans1+ans2;num[ins++]=-1*ans1;return true;}}}    else return false;}else //正数{if(s[0]>='0'&&s[0]<='9'){int flag=0,k=-1;for(int i=0;i<s.size();i++){if(!(s[i]>='0'&&s[i]<='9'||s[i]=='.')){return false;}if(s[i]=='.'){if(flag==0){k=i;//找到.的位置}flag++;}if(flag>=2) {return false;}}if(k==-1)//不是小数{double ans=0;for(int i=0;i<s.size();i++){ans=ans*10+(s[i]-'0');}if(ans>1000)return false;else {num[ins++]=ans;return true;}}else {if(s.size()-k-1>=3){return false;}else {double ans1=0,ans2=0;    for(int i=0;i<k;i++)    {    ans1=ans1*10+(s[i]-'0');    }for(int i=k+1;i<s.size();i++){ans2=ans2*10+(s[i]-'0');}if(s.size()-k-1==2) ans2=ans2/100;else ans2=ans2/10;ans1=ans1+ans2;num[ins++]=ans1;return true;}}}    else return false;}}int main(){scanf("%d",&n);for(int i=0;i<n;i++){getchar();cin>>S[i]; }int temp=0;for(int i=0;i<n;i++){if(IsTrue(S[i])==false){cout<<"ERROR: "<<S[i]<<" is not a legal number"<<endl;}}if(ins==0){cout<<"The average of 0 numbers is Undefined"<<endl;}else {double mm=0;for(int i=0;i<ins;i++){mm+=num[i];//cout<<num[i]<<endl;}mm=mm/ins;if(ins!=1)printf("The average of %d numbers is %.2f",ins,mm);else printf("The average of %d number is %.2f",ins,mm);}system("pause");return 0;}

0 0
原创粉丝点击