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

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;//有幾個小數點的flag
			if (!((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);
	else
		printf("The average of %d numbers is %.2f", geshu, sum / geshu);

	return 0;

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章