当前位置: 代码迷 >> 综合 >> PAT乙级 1054 求平均值 (20分)
  详细解决方案

PAT乙级 1054 求平均值 (20分)

热度:79   发布时间:2023-12-17 14:12:17.0

1054 求平均值 (20分)

不是难题,需要注意所有条件,避免漏错误条件

【思路】

直接对输入的串进行判断。

判断的几个错误分支:

1.超过了 [?1000,1000] 区间。

2.小数点后位数超过两个

3.不是数字

4.小数点超过一个

最后使用全局的变量,存储正确个数和平均值。

【碰到的问题】

1.没看清楚条件,最后测试点0,3错误?如果只有1个正确数字要求和,输出的是number,不带s

#include<iostream>
#include<string>
#include<math.h>
using namespace std;int main()
{int all = 0; cin >> all;int aver = 0;float sum = 0.0;int geshu = 0;for (int i = 0; i < all; i++){string t; cin >> t;int flag1 = 0;//是否正常退出for (int i = 0; i < t.size(); i++){int flag = 0;//有几个小数点的flagif (!((t[i] >= 48 && t[i] <= 57) || t[i] == 46 || t[i]==45))//不是由数字,点,负号组成的就输出error{cout << "ERROR: " << t << " is not a legal number" << endl; flag1 = 1;break;}if (abs(stof(t)) > 1000.0)//如果超出了界,就不再执行下一个for{cout << "ERROR: " << t << " is not a legal number" << endl; flag1 = 1;break;}if (t[i] == 46)//如果小数点后超过两位,或者小数点超过1个{flag++;if(t.size()-i-1>2 || flag>1){cout << "ERROR: " << t << " is not a legal number" << endl; flag1 = 1;break;}	}}if (flag1 == 0){geshu++;sum = sum + stof(t);}}if (geshu == 0)cout << "The average of 0 numbers is Undefined";else if(geshu==1)printf("The average of %d number is %.2f",geshu,sum/geshu);elseprintf("The average of %d numbers is %.2f", geshu, sum / geshu);return 0;}

 

  相关解决方案