演算法第四章上機實驗的 刪數問題

2022-09-10 09:15:11 字數 1372 閱讀 3623

4-2 刪數問題 (30 分)

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

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

輸出最小數。

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

178543 

4

5001 

1

123456 

2

109 

1

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

13

1

1234

9
我的**為

1 #include2

using

namespace

std;

3int

main()419

break;20}

21}22 tihuan--;23}

24int j=0;25

while(b[j]=='

0'&&j26 j++;

27if(j==tihuan)

28 cout<<'0'

;29else

3034

return0;

35 }

這題運用了演算法中貪心演算法的知識,貪心策略為前面的乙個數要小於後面的乙個數,若違反這個規定,則將前面的那個大的數給剔除。

在我看來這一題存在的難點有三個

1.尋找本題對應的貪心策略

2.刪除所要刪除的數後若該串數字的最前面是0的話用什麼方法把0去掉最好

3.若刪除了所有的數字後,該怎麼辦

在寫**的過程中,出現了乙個大家可能都會犯的小錯誤

如果像我一樣使用了巢狀for迴圈來從開頭尋找要被刪除的數字,在刪除了那個數字後並將後面的數字提到前面之後一定要加個break來跳出這層for迴圈,不然的話for迴圈會繼續從已被刪除的數字的位置開始繼續進行刪除數字的迴圈,而不是重新開始。

時間複雜度為o(k*n的平方) 空間複雜度為o(n)

我對貪心演算法的理解就是:貪心演算法是一種極端的演算法,不像動態規劃和分治法那樣穩紮穩打,在用貪心演算法求解問題時,一定要找準貪心策略(多列幾種貪心策略,然後逐一排除選擇最好的那一種),找準之後便可做題。

演算法第四章上機實驗報告

實踐題目名稱 最優合併問題 問題描述 給定k 個排好序的序列,用 2 路合併演算法將這k 個序列合併成乙個序列。假設所採用的 2 路合併演算法合併 2 個長度分別為m和n的序列需要m n 1 次比較。試設 計乙個演算法確定合併這個序列的最優合併順序,使所需的總比較次數最少。為了進行比較,還需要確定合...

演算法第四章上機實驗報告

題目 最優合併問題 1.問題描述 給定k 個排好序的序列,用 2 路合併演算法將這k 個序列合併成乙個序列。假設所採用的 2 路合併演算法合併 2 個長度分別為m和n的序列需要m n 1 次比較。試設 計乙個演算法確定合併這個序列的最優合併順序,使所需的總比較次數最少。為了進行比較,還需要確定合併這...

演算法第四章上機實驗報告

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