E 最小新整數(貪心學習)

2021-10-25 15:22:31 字數 801 閱讀 5160

給定乙個十進位制正整數n(0 < n < 1000000000),每個數字上數字均不為0。n的位數為m。

現在從m位中刪除k位(0

input

第一行t, 表示有t組資料;

接下來t行,每一行表示一組測試資料,每組測試資料報含兩個數字n, k。

output

t行,每行乙個數字,表示從n中刪除k位後得到的最小整數。

sample input

29128456 2

1444 3

sample output

12456

1從左到右以此判斷n每位上的數字,如果n[i]大於n[i+1],則刪去n[i],此時數字n長度減1;

再判斷該數字前一位是否大於其下一位,大於則刪去,直到刪去k位,或無法刪去;

刪除不足k位則將數字從右往左依次刪除,直到共刪除k位數字。

剛開始寫題時錯誤地理解成了刪去最大的k位數字,把剩餘的數字重組為最小的形式了。還是寫的題太少,不懂貪心。

#include

#include

using

namespace std;

intmain()

if(j==k)

break;}

if(j==k)

//已刪去k位數字

for(i=

0;i) cout<;else

for(i=

0;i)//刪去的位數不足k,少輸出k-j個

cout<; cout<}return0;

}

E 最小新整數

給定乙個十進位制正整數n 0 n 1000000000 每個數字上數字均不為0。n的位數為m。現在從m位中刪除k位 0input 第一行t,表示有t組資料 接下來t行,每一行表示一組測試資料,每組測試資料報含兩個數字n,k。output t行,每行乙個數字,表示從n中刪除k位後得到的最小整數。sam...

最小新整數

題目鏈結 先看第一組 1 5 1 9 小大 小 大 留刪 留 留 第二組 1 4 1 5 1 9 小 大 小 大 小 大 留 刪 留刪 留 留 刪掉的是 山峰 也就是比後乙個數大的數,且越靠前 山 峰 越早刪。大體思路也就一句話 刪除靠前的 山峰 另外,有幾個坑不得不提 1.注意刪除前導0 雖然它說...

貪心 bailian4137 最小新整數

這個題目原本以為選出前k大的數刪除就可以得到正確結果,但是這種策略是錯的,舉乙個反例 52376 2,如果取出7 6,得到523,顯然還有更小的數 236。正確的貪心策略是從左到右每次選取乙個比後一位大的數,刪除,進行k次,如果所有數字是增序的,就刪除最後乙個數字。include include c...