一、問題描述
給定n位整數a,去掉其中任意k<=n個數字后,剩下的數字按原次序排列組成一個新的正整數。
如輸入一個正整數:178543;
刪除其中4個數
得到:13
二、解決思路--貪婪算法
這里先介紹之前錯誤的思路:
找出數字中n-k個最小的數,組成新的正整數;
但是很快就有問題出現,雖然每次都找的是整數各個位置中最小的數,但是忽略掉了位置的相對關系,如以下的例子:
輸入的一個整數:178906; 6位數的整數
刪除其中4個數;
按照這個思路,即要選擇6-4=2個最小的數,即0 和1,按照數中原有的次序,得到的是10;
但是事實上,應該是06,即6
所以換個思路,叫“最近下降點”優先。
利用“最陡下降點”優先,即每次找到第一個元素,使其滿足大於下一個元素。正如上述的那個例子,第一個刪除的是9,因為9>0;
得到的整數是17806;第二個刪除的是8,因為8>0,得到的整數是1706,第三個刪除的是7,因為7>0,得到的整數是106;
第四個刪除的是1,因為1>0,得到的是06,為正確的答案。
三、程序設計
(1)同樣,給出錯誤的設計思路的程序:

(2)正確的設計思路的程序:

