【PAT甲级】1108 Finding Average (20分)

题意:

输入一个正整数N(<=100),接着输入一行N组字符串,表示一个数字,如果这个数字大于1000或者小于1000或者小数点后超过两位或者压根不是数字均为非法,计算合法数字的平均数。

trick:

测试点2答案错误原因:题面指出如果只有一个合法数字,输出numbers的时候不加s,即为number。

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int main(){
 5     //ios::sync_with_stdio(false);
 6     //cin.tie(NULL);
 7     //cout.tie(NULL);
 8     int n;
 9     cin>>n;
10     int cnt=0;
11     double sum=0;
12     for(int i=1;i<=n;++i){
13         string s;
14         cin>>s;
15         int flag=0;
16         if(s[0]=='-')
17             flag=1;
18         double x=0;
19         int pos=-1;
20         for(int i=flag;i<s.size();++i){
21             if(s[i]=='.'){
22                 pos=i;
23                 break;
24             }
25             if(s[i]<'0'||s[i]>'9'){
26                 flag=2;
27                 break;
28             }
29             x*=10;
30             x+=s[i]-'0';
31         }
32         if(pos!=-1)
33             for(int i=pos+1;i<s.size();++i){
34                 if(s[i]<'0'||s[i]>'9'){
35                     flag=2;
36                     break;
37                 }
38                 x+=(s[i]-'0')/(1.0*pow(10,(i-pos)));
39             }
40         if(flag)
41             x*=-1;
42         if(s.size()-1-pos>2&&pos!=-1)
43             flag=2;
44         if(flag==0&&pos==0||flag==1&&pos==1)
45             flag=2;
46         if(x>1000||x<-1000)
47             flag=2;
48         if(flag==2){
49             cout<<"ERROR: "<<s<<" is not a legal number\n";
50             continue;
51         }
52         ++cnt;
53         sum+=x;
54     }
55     sum/=1.0*cnt;
56     cout<<"The average of "<<cnt;
57     if(cnt!=1)
58         cout<<" numbers is ";
59     else
60         cout<<" number is ";
61     if(!cnt)
62         cout<<"Undefined";
63     else
64         printf("%.2lf",sum);
65     return 0;
66 }

 

上一篇:STELLA系统动力学仿真模拟软件-system dynamics


下一篇:C - Bear and Finding Criminals(对称性+枚举)