PAT-B 1054 求平均值 【模擬】

Enjoy_process發表於2019-02-24

                                            PAT-B 1054 求平均值 

                  https://pintia.cn/problem-sets/994805260223102976/problems/994805272659214336

 

 

題目

本題的基本要求非常簡單:給定 N 個實數,計算它們的平均值。但複雜的是有些輸入資料可能是非法的。一個“合法”的輸入是 [−1000,1000] 區間內的實數,並且最多精確到小數點後 2 位。當你計算平均值的時候,不能把那些非法的資料算在內。

輸入

輸入第一行給出正整數 N(≤100)。隨後一行給出 N 個實數,數字間以一個空格分隔。

輸出

對每個非法輸入,在一行中輸出 ERROR: X is not a legal number,其中 X 是輸入。最後在一行中輸出結果:The average of K numbers is Y,其中 K 是合法輸入的個數,Y 是它們的平均值,精確到小數點後 2 位。如果平均值無法計算,則用 Undefined 替換 Y。如果 K 為 1,則輸出 The average of 1 number is Y

樣例輸入

7
5 -3.2 aaa 9999 2.3.4 7.123 2.35

樣例輸出

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

分析

模擬題,具體細節看程式。

C++程式

#include<iostream>
#include<ctype.h>
#include<string>

using namespace std;

double val;//如果正確的話,記錄字串代表的值 

bool isLegal(string s)
{
	int pos=s.length();//記錄小數點的位置 
	bool flag=false;//記錄是否有負號 
	for(int i=0;i<s.length();i++)
	{
		if(s[i]=='.')
		{
			if(pos==s.length())
			  pos=i;
			else
			  return false;//說明已經有小數點了 
		}
		else if(s[i]=='-'&&i==0)
		  flag=true;
		else if(!isdigit(s[i]))//不是小數點也不是數字 
		  return false;
	}
	if(pos!=s.length()&&pos<s.length()-3) return false;//最多精確到小數點後 2 位
	//計算它的值
	val=0;//置為0
	int i=flag?1:0;
	for(;i<pos;i++) 
	  val=val*10+s[i]-'0';
	double tmp=0;//小數部分
	for(int i=s.length()-1;i>pos;i--)
	  tmp=tmp*0.1+s[i]-'0';
	tmp*=0.1;//最後需要乘以0.1 
	val+=tmp;
	val*=flag?-1:1;//考慮負號 
	return (-1000.0<=val&&val<=1000.0)?true:false; 
}

int main()
{
	int n;
	string s;
	cin>>n;
	int num=0;
	double sum=0;
	for(int i=1;i<=n;i++)
	{
		cin>>s;
		if(isLegal(s))//合法 
		{
			num++;
			sum+=val;
		}
		else
			cout<<"ERROR: "<<s<<" is not a legal number"<<endl;
	}
	if(num==0)
	  printf("The average of 0 numbers is Undefined\n");
	else if(num==1)
	  printf("The average of 1 number is %.2lf\n",sum);
	else
	  printf("The average of %d numbers is %.2lf\n",num,sum/num);
	return 0;
}

 

相關文章