本題的基本要求非常簡(jiǎn)單:給定N個(gè)實(shí)數(shù),計(jì)算它們的平均值。但復(fù)雜的是有些輸入數(shù)據(jù)可能是非法的。一個(gè)“合法”的輸入是[-1000,1000]區(qū)間內(nèi)的實(shí)數(shù),并且最多精確到小數(shù)點(diǎn)后2位。當(dāng)你計(jì)算平均值的時(shí)候,不能把那些非法的數(shù)據(jù)算在內(nèi)。
輸入格式:
輸入第一行給出正整數(shù)N(<=100)。隨后一行給出N個(gè)實(shí)數(shù),數(shù)字間以一個(gè)空格分隔。
輸出格式:
對(duì)每個(gè)非法輸入,在一行中輸出“ERROR: X is not a legal number”,其中X是輸入。最后在一行中輸出結(jié)果:“The average of K numbers is Y”,其中K是合法輸入的個(gè)數(shù),Y是它們的平均值,精確到小數(shù)點(diǎn)后2位。如果平均值無(wú)法計(jì)算,則用“Undefined”替換Y。如果K為1,則輸出“The average of 1 number is Y”。
輸入樣例1: 7 5 -3.2 aaa 9999 2.3.4 7.123 2.35 輸出樣例1: 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 輸入樣例2: 2 aaa -9999 輸出樣例2: ERROR: aaa is not a legal number ERROR: -9999 is not a legal number The average of 0 numbers is Undefined
#include <iostream>#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <cctype>using namespace std;int N;char str[100][100]; bool Check(char s[]){ int i = 0; if(s[0] == '-') { i ++; } //整數(shù)部分檢測(cè),只能是數(shù)字 for(; s[i] && s[i] != '.'; i ++){ if(!isdigit(s[i])){ return false; } } //小數(shù)部分檢測(cè),只能是不超過(guò)2位的數(shù)字 if(s[i] == '.'){ for(int j = i + 1; s[j]; j ++){ if(!isdigit(s[j]) || j - i > 2){ return false; } } } double a = fabs(atof(s)); //范圍檢測(cè) if(a > 1000.0) return false; return true;}void solve(){ int ans = 0; double sum = 0; for(int i = 0; i < N; i ++){ if(Check(str[i])){ ans ++; sum += atof(str[i]); } else{ cout << "ERROR: " << str[i] << " is not a legal number" << endl; } } if(ans){ if(ans == 1)新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注