PAT-B 1054 求平均值 【模擬】
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;
}
相關文章
- PAT-B 1027 列印沙漏 【模擬】
- PAT-B 1058 選擇題 【模擬】
- PAT-B 1061 判斷題【模擬】
- PAT-B 1067 試密碼【模擬】密碼
- PAT-B 1071 小賭怡情【模擬】
- PAT-B 1072 開學寄語【模擬】
- PAT-B 1081 檢查密碼【模擬】密碼
- PAT-B 1084 外觀數列 【模擬】
- PAT-B 1085 PAT單位排行【模擬】
- PAT-B 1018 錘子剪刀布 【模擬】
- 求陣列平均值陣列
- PAT-B 1019 數字黑洞【陣列+模擬】陣列
- PAT-B 1017 A除以B【模擬 大數除法】
- PAT-B 1059 C語言競賽【模擬】C語言
- PAT-B 1024 科學計數法【模擬+字串】字串
- PAT-B 1077 互評成績計算【模擬】
- PAT-B 1012 數字分類【簡單模擬】
- PAT-B 1025 反轉連結串列【模擬+對映】
- PAT-B 1069 微博轉發抽獎【模擬+集合】
- 使用 node 模擬請求介面
- 使用 Netcat 模擬 HTTP 請求HTTP
- python輸入一個列表求平均值Python
- PAT A1054
- C#模擬HTTP請求Post JSONC#HTTPJSON
- Linux curl 命令模擬 POST/GET 請求Linux
- PAT-B 1008 陣列元素迴圈右移問題【簡單模擬】陣列
- 避免溢位求平均值的演算法演算法
- 使用postman模擬登陸post請求方法Postman
- 使用Mock.js模擬資料請求MockJS
- mysql Unknown error 1054MySqlError
- PAT-B 1001 害死人不償命的(3n+1)猜想【模擬】
- axios模擬GET請求例項及詳解iOS
- 求陣列之和,最小值,最大值,平均值陣列
- PAT-B 1010 一元多項式求導求導
- Python 使用socket模擬http請求,從阻塞到協程PythonHTTP
- ASP.NET Core擴充套件庫之Http請求模擬ASP.NET套件HTTP
- Vue-cli 使用json server在本地模擬請求資料VueJSONServer
- 前端技術分享:不重複的組成4位數求平均值前端