給定乙個十進位制正整數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...