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 輸出每組...