P1106 刪數問題 詳細題解

2021-10-22 02:58:53 字數 744 閱讀 2322

戳一戳

題解:對於這題我們使用貪心思想

貪心策略是比較前乙個數是不是比後面一位數要大(因為要得到最小的數,就要盡量讓數的前面位數小)

如果要大的話,就把當前的數給刪去

得到乙個新的string

然後再重新進行一次兩兩大小的判斷

每重新判斷一次

就會刪去乙個數

也就是總體要判斷k次

當然也會出現沒有前面的數比後面的數要大的情況

此時這個string裡面的數是呈現遞增的現象的,那麼就刪除最後乙個元素

另外:要考慮三種特殊情況:

一種是:前導0要刪去 列如:012

一種是:數中間的零不能刪去 列如:102

一種是:全是0的一種情況 列如:000000

**:

#include

#include

#include

using

namespace std;

intmain()

}if(t ==0)

n.erase

(pos,1)

;}int len = n.

length()

;int bushiling=0;

for(

int i =

0; i < len-

1; i++

)else}}

cout << n[len -1]

;return0;

}

P1106 刪數問題

傳送門 這道題問給出乙個數字 n位 問刪去任意k位使其剩下位數組成的數字最小 一開始我是覺得刪掉前k大的位數,顯然是不對的。例如,1649,我們刪掉9,那麼結果就為164,如果我們刪掉6就是149,顯然後面的更小的。看了題解才會做,我們要一直找s i s i 1 的數並刪掉,並且肯定能找到,中間找不...

P1106 刪數問題

題目描述 鍵盤輸入乙個高精度的正整數n 不超過250位 去掉其中任意k個數字後剩下的數字按原左右次序將組成乙個新的正整數。程式設計對給定的n和k,尋找一種方案使得剩下的數字組成的新數最小。輸入格式 n 高精度的正整數 k 需要刪除的數字個數 輸出格式 最後剩下的最小數。輸入輸出樣例 輸入175438...

P1106 刪數問題

題目描述 鍵盤輸入乙個高精度的正整數 n 不超過 250 位 去掉其中任意 k 個數字後剩下的數字按原左右次序將組成乙個新的非負整數。程式設計對給定的 n和 k,尋找一種方案使得剩下的數字組成的新數最小。輸入格式 n 高精度的正整數 k 需要刪除的數字個數 輸出格式 最後剩下的最小數。輸入輸出樣例 ...