給定乙個高精度正整數a, 去掉其中k個數字後按原左右次序將組成乙個新的正整數。對給定的a, k尋找一種方案,使得剩下的數字組成的新數最小。
解:應用貪心演算法設計求解
(1) 設計要點
操作物件為n位高精度數,儲存在陣列a中。
在整數的位數固定的前提下,讓高位的數字盡量小,整數的值就小。這就是所要選取的貪心策略。
每次刪除乙個數字,選擇乙個使剩下的數最小的數字作為刪除物件。
當k=1時,對於n位數構成的數刪除哪一位,使得剩下的資料最小。刪除滿足如下條件的a[i]:它是第乙個a[i]>a[i+1]的數,如果不存在則刪除a[n](最後一位數字,具體實現時請注意下標表示方法)。
當k>1(當然小於n),按上述操作乙個乙個刪除。每刪除乙個數字後,後面的數字向前移位。刪除乙個達到最小後,再從頭開始,刪除第2個,依此分解為k次完成。
若刪除不到k個後已無左邊大於右邊的降序或相等,則停止刪除操作,列印剩下串的左邊n-k個數字即可(相當於刪除了若干個最右邊的數字)
刪數問題 貪心演算法 C
題目描述 給定乙個高精度正整數a,去掉其中k個數字後按原左右次序將組成乙個新的正整數。對給定的a,k尋找一種方案,使得剩下的數字組成的新數最小。此題可用貪心演算法進行求解 具體思路 當k 1時,對於n位數構成的數刪除哪一位,使得剩下的資料最小。刪除滿足如下條件的a i 它是第乙個a i a i 1 ...
演算法習題 刪數問題
給定n位正整數a,去掉其中任意k n個數後,剩下的數按原次序重新排列成乙個新的正整數。對於給定的n位正整數a和正整數k,設計乙個演算法使這個新的正整數達到最小。給定乙個正整數a為 785314,經過刪數後得到的最小的正整數應該是 14。輸入 785314 4輸出 14 include include...
C 刪數問題 SDUT
time limit 1000 ms memory limit 65536 kib problem description 鍵盤輸入乙個高精度的正整數n 100位 去掉其中任意s個數字後剩下的數字按照原來的左右次序組成乙個新的正整數。程式設計對給定的n與s,尋找一種方案,使得剩下的數字組成的新數最小...