PAT乙級1054 求平均值 20分

2022-09-19 01:54:09 字數 1974 閱讀 6387

1054 求平均值 (20分)

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

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

對每個非法輸入,在一行中輸出error: x is not a legal number,其中x是輸入。最後在一行中輸出結果:the **erage of k numbers is y,其中k是合法輸入的個數,y是它們的平均值,精確到小數點後 2 位。如果平均值無法計算,則用undefined替換y。如果k為 1,則輸出the **erage 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 **erage of 3 numbers is 1.38

2

aaa -9999

error: aaa is not a legal number

error: -9999 is not a legal number

the **erage of 0 numbers is undefined

思路:

1.第乙個字元要麼是數字要麼是負號

2.不能有字母(即字元範圍是'0'----'9'以及'.'和'-')

3.小數點不能有兩個,且小數點可以在首位也可以在末尾

4.小數點後最多2位數字

5.數字範圍是[-1000,1000]

特別要注意:

測試點2的 1 number 不要寫成 1 numbers 不能有s 巨坑

首次通過**:

1 #include2 #include34

intmain()

30 dec=1;31

}32else

if(a[j]>='

0'&&a[j]<='9'

) 37

else

45 num=num+(float)(a[j]-'

0')/b;

46 b*=10;47

}48//數字大於1000

49if(num>1000

) 54}55

else60}

61if

(flag)

65else

68 num_sum++;69}

7071}72

73if(num_sum==0)76

else

if(num_sum>1)79

else

82return0;

83 }

view code

參考:

from:

hive UDAF求平均值

最近做資料遷移專案,把聚合部分從kettle遷移到hadoop集群上,需要寫很多聚合指令碼 在論壇是看到alipay同事寫過類似cube的udaf,拿過來執行下報錯,有幾個地方沒看多,而且沒有注釋,只好從基礎開始看,自己搞乙個,之前寫過udf所以入手還是聽快的 準備 1 實現自己的udaf需要整合u...

spark 求平均值

val rdd sc.makerdd list a 1 a 2 a 3 b 1 b 2 b 3 b 4 a 4 2 rdd.combinebykey x x,1 x int,int y int x.1 y,x.2 1 x int int y int int x.1 y.1,x.2 y.2 mapva...

大數求平均值公式

方法1 維護乙個cnt記錄當前資料的個數,evr記錄當前的平均值 然後每增減乙個新資料val時,更新這個cnt和evr的值即可 evr val evr cnt int main 模擬,每產生乙個數就更新這個cnt和evr for i 0 i sizeof d sizeof d 0 i cout 方法...