NOYJ 尋找最大數

2022-09-16 19:12:11 字數 1009 閱讀 4948

1)題目:尋找最大數

請在整數 n 中刪除m個數字, 使得餘下的數字按原次序組成的新數最大,比如當n=92081346718538,m=10時,則新的最大數是9888輸入第一行輸入乙個正整數t,表示有t組測試資料

輸入每組測試資料佔一行,每行有兩個數n,m(n可能是乙個很大的整數,但其位數不超過100位,並且保證資料首位非0,m小於整數n的位數)

輸出每組測試資料的輸出佔一行,輸出剩餘的數字按原次序組成的最大新數

樣例輸入

2

92081346718538 10

1008908 5

樣例輸出

9888 98

2)演算法分析:

題目中明確的指出了要刪除一部分數,使得剩下的數最大,那麼我們同樣可以將思路反轉,我們來選取最大的數,使之構成s最大的數。就像樣例中m=10;我們就可以選取strlen(s)-m個數字來構成我們所需要的數。首先我們將數字以字串的形式來儲存。其次,我們需要選擇最高位的數字,但是題目中的要求是在原數上刪除,所以我們不可以打亂原數字各個位的順序,所以第乙個數字我們只能從s[0]到s[m]中查詢最大數,然後從最大數字之後的一位到s[m+1]中查詢第二位,直至找到最後一位。在這個過程中我們必須要保證還有足夠的數字來供我們選擇,因為不管什麼,數字多的肯定要比數字少的大。

3)源**:

#include

#include

#include

#include

#include

using namespace std;

int main()

} ans[num++] = s[sign++];

} for(int i = 0; i < len - m; ++i)

cout<

cout<

} return 0;

}

尋找最大數

描述 請在整數 n 中刪除m個數字,使得餘下的數字按原次序組成的新數最大,比如當n 92081346718538,m 10時,則新的最大數是9888 輸入 第一行輸入乙個正整數t,表示有t組測試資料 每組測試資料佔一行,每行有兩個數n,m n可能是乙個很大的整數,但其位數不超過100位,並且保證資料...

尋找最大數

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 請在整數 n 中刪除m個數字,使得餘下的數字按原次序組成的新數最大,比如當n 92081346718538,m 10時,則新的最大數是9888 輸入 第一行輸入乙個正整數t,表示有t組測試資料 每組測試資料佔一行,每行有兩個數n...

尋找最大數

尋找最大數 三 時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述給出乙個整數n,每次可以移動2個相鄰數字上的數字,最多移動k次,得到乙個新的整數。求這個新的整數的最大值是多少。輸入多組測試資料。每組測試資料佔一行,每行有兩個數n和k 1 n 10 18 0 k 100 輸出每組...