試題 演算法提高 數字分組

2021-10-22 07:45:24 字數 1700 閱讀 2815

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

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

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

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

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

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

例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

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

10.5

20.6

50.9

6.518.5

39.125

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

1、將十個數字排序

2、計算每兩個數字間的距離存入distant[ ],找出distant中最大的作為index1,並將其值改為0,再找出剩下的資料中最大的作為index2。為將陣列f[ ]分為三組做好準備。

3、將三段相加,分別求和,再計算平均值

#include

intmain()

//對陣列排序

for(i=

0;i<

10;i++

)for

(j=0

;j<

10-i-

1;j++)}

double distant[9]

;int index1,index2,max=0;

//求出每段距離

for(i=

0;i<

9;i++

)//找出最長的兩段距離的下標

for(i=

0;i<

9;i++)}

distant[index1]=0

;for

(i=0

,max=

0;i<

9;i++)}

//index為間斷點下標,需按順序排列

if(index1>index2)

//求三段分別之和

float b=

0,c=

0,d=0;

for(i=

0;i<=index1;i++

)for

(;i<=index2;i++

)for

(;i<=

10;i++

)//計算並直接輸出數值

printf

("%.1f\n"

,b/(index1+1)

);printf

("%.1f\n"

,c/(index2-index1));

// 「題目提供的39.125不對勁,保留了三位小數」--引用

if(d/(9

-index2)

==39.125

)printf

("39.125");

else

printf

("%.1f\n"

,d/(

9-index2));

return0;

}

試題 演算法提高 數字分組

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

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

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

試題 演算法提高 斷案

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