試題 演算法提高 數字分組

2021-10-19 09:47:55 字數 1476 閱讀 1660

問題描述

輸入任意10個浮點數,根據它們的聚集程度劃分為3組,輸出每一組的平均值。

提供老師上課講的一種思路:將10個數字進行在數軸上排序,然後計算每兩個點間的距離,在所有的距離中選取兩個最大距離處斷開,這樣就把10個數字分為了3組。

本題難度較大,如果深入討論會比較複雜,大家可以只考慮如下面樣例所示的分組情況非常簡單的情況,只要簡單情況能夠成功計算,本題就能得分。

另外,本題內容有些超前,推薦大家自學一下陣列那一章中第一節一維陣列,然後使用一維陣列來做。排序演算法可以參考trustie平台上傳的氣泡排序法參考資料。

輸入格式

十個待輸入的浮點數,使用空格隔開

輸出格式

三組數的平均數,每輸出乙個需要換行

樣例輸入

乙個滿足題目要求的輸入範例。

例1:50.4 51.3 52.3 9.5 10.4 11.6 19.1 20.8 21.9 49.6

例2:8.6 7.4 3.5 17.9 19.1 18.5 37.6 40.4 38.5 40.0

樣例輸出

與上面的樣例輸入對應的輸出。

例1:10.5

20.6

50.9

例2:6.5

18.5

39.125

資料規模和約定

僅考慮如樣例一樣簡單情況、分組明顯的輸入

既然要求間隔最大的點,那就要用另乙個陣列來儲存間隔,首先找到間隔最大的數,記錄下這個數再把它歸零,然後再次尋找間隔最大的數,這樣兩個間隔點就能得出,最後再求出每組平均值便可。

**如下:

#include

intmain()

for(i=

0;i<

10;i++)}

}float b[9]

; j=0;

for(i=

1;i<

10;i++

)float max=b[0]

,m=0

;for

(i=1

;ifloat n=m;

b[(int)m]=0

; max=b[0]

;for

(i=1

;iif(m>n)

m+=1;

n+=1;

float sum=0;

for(i=

0;i)printf

("%.1f\n"

,sum/m)

; sum=0;

for(i=m;i)printf

("%.1f\n"

,sum/

(n-m));

sum=0;

for(i=n;i<

10;i++)if

(sum/(10

-n)==

39.125

)else

return0;

}

本道題答案有點小錯誤39.125保留了3位小數就很莫名其妙,只能拿出來單獨討論。

試題 演算法提高 數字分組

輸入任意10個浮點數,根據它們的聚集程度劃分為3組,輸出每一組的平均值。提供老師上課講的一種思路 將10個數字進行在數軸上排序,然後計算每兩個點間的距離,在所有的距離中選取兩個最大距離處斷開,這樣就把10個數字分為了3組。本題難度較大,如果深入討論會比較複雜,大家可以只考慮如下面樣例所示的分組情況非...

試題 演算法提高 三進製數字和

問題描述 給定l和r,你需要對於每乙個6位三進製數 允許前導零 計算其每乙個數字上的數字和,設其在十進位制下為s。乙個三進製數被判斷為合法,當且僅當s為質數,或者s屬於區間 l,r 你的任務是給出合法三進製數的個數。輸入格式 一行兩個非負整數l,r。輸出格式 一行乙個非負整數表示答案。樣例輸入 0 ...

試題 演算法提高 斷案

問題描述 公安人員審問甲 乙 丙 丁四個嫌疑犯,已確知,這四個人當中僅有一人是偷竊者,還知道這四個人的答話,要麼完全誠實,要麼完全說謊。在回答公安人員的問話中 甲說 乙沒有偷,是丁偷的。乙說 我沒有偷,是丙偷的。丙說 甲沒有偷,是乙偷的。丁說 我沒有偷,我用的那東西是我家裡的。請根據上述四人答話,判...