輸入任意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 ...
試題 演算法提高 斷案
問題描述 公安人員審問甲 乙 丙 丁四個嫌疑犯,已確知,這四個人當中僅有一人是偷竊者,還知道這四個人的答話,要麼完全誠實,要麼完全說謊。在回答公安人員的問話中 甲說 乙沒有偷,是丁偷的。乙說 我沒有偷,是丙偷的。丙說 甲沒有偷,是乙偷的。丁說 我沒有偷,我用的那東西是我家裡的。請根據上述四人答話,判...