演算法第二章上機實踐報告

2022-08-21 05:00:14 字數 1277 閱讀 3118

題目:派

我的生日要到了!根據習俗,我需要將一些派分給大家。我有n個不同口味、不同大小的派。有f個朋友會來參加我的派對,每個人會拿到一塊派(必須乙個派的一塊,不能由幾個派的小塊拼成;可以是一整個派)。

我的朋友們都特別小氣,如果有人拿到更大的一塊,就會開始抱怨。因此所有人拿到的派是同樣大小的(但不需要是同樣形狀的),雖然這樣有些派會被浪費,但總比搞砸整個派對好。當然,我也要給自己留一塊,而這一塊也要和其他人的同樣大小。

請問我們每個人拿到的派最大是多少?每個派都是乙個高為1,半徑不等的圓柱體。

第一行包含兩個正整數n和f,1 ≤ n, f ≤ 10 000,表示派的數量和朋友的數量。 第二行包含n個1到10000之間的整數,表示每個派的半徑。

輸出每個人能得到的最大的派的體積,精確到小數點後三位。

3 3

4 3 3

在這裡給出相應的輸出。例如:25.133

解法心得:

首先由於計算涉及到派的體積,需要設定乙個常量pi

讀題後,我首先想到,單人分到的最大的派一定是從完整的最大的派中切下來的,因此先找到最大的派

再利用二分法,找到可以滿足題意分派的體積值

在尋找體積值的函式中,我設定了乙個cnt值,用來計算每乙個體積值能分給的人數,故cnt值需要大於等於m+1,即需要多於或等於朋友的人數。

**實現:

#include#include

#include

#include

using

namespace

std;

const

int maxn=10000+10

;const

double pi=acos(-1.0

);double

a[maxn];

intn,m;

bool can(double

s)

return cnt>=m+1;}

intmain()

double

mid;

while(r-l>1e-5

)

else r=mid;

}cout

<<3)

}

演算法第二章上機實踐報告

實踐題目名稱 找第k個小的數 問題描述 設計乙個平均時間為o n 的演算法,在n 1 n 1000 個無序的整數中找出第k小的數。演算法描述 就是先假設a left 為這個分界值x,然後排序。比較x是不是第k個如果是,返回這個值。如果不是比較一下x和a k 的大小,如果xa k 遞迴在x的右邊找 演...

演算法第二章上機實踐報告

7 1 最大子列和問題 20分 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資...

演算法第二章上機實踐報告

1,實踐題目名稱 最大子列和問題 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試...