第四章上機實踐報告

2022-06-27 23:36:09 字數 2008 閱讀 4181

實踐題目

4-2 刪數問題 (110

分)給定n位正整數a,去掉其中任意k≤n 個數字後,剩下的數字按原次序排列組成乙個新 的正整數。對於給定的n位正整數a和正整數 k,設計乙個演算法找出剩下數字組成的新數最 小的刪數方案。

輸入格式:

第 1 行是1 個正整數 a。第 2

行是正整數k。

輸出格式:

輸出最小數。

輸入樣例:

在這裡給出一組輸入。例如:

178543

4輸出樣例:

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

13問題描述

給你乙個數字,讓你刪除k個數字,輸出最小數(要刪除前導0)。

演算法描述

正解:從左邊開始刪除大於右邊的每乙個數字。如1651刪除6變成151,刪除5變成11.

從高位開始,刪除數字比右邊大的數顯然正確。

本人想法:定義函式gao(l,r,num)表示在區間【l,r】中刪除num個數得到的最小數

找出區間中的最小值,其下標為xb,定義n為最小值左邊數的個數(不包括最小值)

如果 n

<=num,說明要把最小值左邊的數全部刪了,因為左邊的數都比最小值大,高位的數要盡可能小。

如果 n >num,說明要把左邊的數全刪,同時計算最小值右邊的最小數(注意更新刪除數字的個數)。

刪除左邊數的理由是高位數要盡可能小,所以把最小值放在最高位顯然合理,根據此貪心策略繼續計算右邊區間部分。

演算法時間複雜度和空間複雜度分析

正解:每刪除乙個數字要從頭遍歷,同時移動陣列,所以時間複雜度是o(n^2+k),沒有用到額外陣列,所以空間複雜度是o(1

)。   本人演算法:找最小值要o(n),最壞情況遞迴n次,所以時間複雜度是o(n^2+k),因為用了遞迴,所以空間複雜度是o(n)。

view code

本人**:(沒有優化找最小值)

view code

心得體會

這次實踐debug時間有點久,最後發現(數字1)寫成了(字母l)(╯‵□′)╯︵┻━┻ ,可能是因為一開始想錯了,改思路的時候腦子有點亂,同時**也有 -1 和 -l 的操作,一不小心就打錯了。吸取教訓,以後多寫幾個變數定義x-1和x-l,不要一邊想整體一邊想細節。

view code

實踐題目:程式儲存問題

問題描述

設有n 個程式要存放在長度為l的磁帶上。程式i存放在磁帶上的長度是 li,1≤i≤n。 程式儲存問題要求確定這n 個程式在磁帶上的乙個儲存方案, 使得能夠在磁帶上儲存盡可能多的程式。 對於給定的n個程式存放在磁帶上的長度,計算磁帶上最多可以儲存的程式數。

第一行是2 個正整數,分別表示檔案個數n和磁帶的長度l。接下來的1行中,有n個正整數,表示程式存放在磁帶上的長度。

輸出最多可以儲存的程式數。

在這裡給出一組輸入。例如:

6 50 

2 3 13 8 80 20

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

5
演算法描述先對程式進行從小到大排序,然後依次放入磁帶直到放不下。

證明:假設最優解有,而p1 < p2,那麼把p2換成p1組成的解,放入的程式數不變而且也滿足題意,所以也是一組最優解,貪心策略正確。

演算法時間及空間複雜度分析

時間複雜度:排序o(nlogn),判斷程式能否放入磁帶o(n),所以時間複雜度為o(nlogn)

空間複雜度:開了乙個變數記錄已放程式的總空間,空間複雜度為o(1)。

心得體會

這次實踐debug時間有點久,最後發現(數字1)寫成了(字母l)(╯‵□′)╯︵┻━┻ ,可能是因為一開始想錯了,改思路的時候腦子有點亂,同時**也有 -1 和 -l 的操作,一不小心就打錯了。吸取教訓,以後多寫幾個變數定義x-1和x-l,不要一邊想整體一邊想細節。

第四章上機實踐報告

刪數問題 110 分 給定n位正整數a,去掉其中任意k n 個數字後,剩下的數字按原次序排列組成乙個新 的正整數。對於給定的n位正整數a和正整數 k,設計乙個演算法找出剩下數字組成的新數最 小的刪數方案。第 1 行是1 個正整數 a。第 2 行是正整數k。輸出最小數。在這裡給出一組輸入。例如 178...

第四章上機實踐報告

一 實踐題目 二 題目描述 給定一串串行,每次取兩個數的值加起來,然後把兩個數取出來,將兩個數加起來的值放入序列 三 演算法描述 題目大意其實類似哈夫曼編碼,只是他還要再求乙個最大值的 因此進行兩次操作,一次每次都是取最大的兩個數,另一次每次都是取最小的兩個數 每次取到的兩個最大或者最小的數a b進...

第四章上機實踐報告

4 1 程式儲存問題 40 分 設有n 個程式要存放在長度為l的磁帶上。程式i存放在磁帶上的長度是 li,1 i n。程式儲存問題要求確定這n 個程式在磁帶上的乙個儲存方案,使得能夠在磁帶上儲存盡可能多的程式。對於給定的n個程式存放在磁帶上的長度,計算磁帶上最多可以儲存的程式數。第一行是2 個正整數...