Problem Description
鍵盤輸入一個高精度的正整數n(≤100位),去掉其中任意s個數字后剩下的數字按照原來的左右次序組成一個新的正整數。編程對給定的n與s,尋找一種方案,使得剩下的數字組成的新數最小。
Input
輸入有多組 每組包括原始數n,要去掉的數字數s;
Output
輸出去掉s個數后最小的數
Sample Input
178543 4
Sample Output
13
思路:
遇到逆序就刪除,如果逆序刪除完之后還是沒有刪夠,那就刪除最后一個數字 n - num 次即可
12548 刪除3位數字 -> 1248 -> 124 ->12
AC代碼:

1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int main(){ 5 int n,num; 6 string s; 7 while(cin >> s){ 8 scanf("%d",&n); 9 if(n >= s.size()){ 10 printf("0\n"); 11 continue; 12 } 13 else{ 14 num = 0; 15 for(int i = 1;i < s.size();i++){ 16 if(s[i - 1] > s[i]){ 17 num++; 18 s.erase(i - 1,1); 19 if(num == n) 20 break; 21 //由於刪除完之后下標不會往前移動,且循環要加1,所以要想回到原來的位置共需要減2 22 i = i - 2; 23 } 24 } 25 if(num != n) 26 for(int i = 0;i < n - num;i++)//刪除最后一個,刪除n - num次即可 27 s.erase(s.size() - 1); 28 for(int i = 0;i < s.size();i++){ 29 if(s[i] != '0'){ 30 for(int j = i;j < s.size();j++) 31 cout << s[j]; 32 printf("\n"); 33 break; 34 } 35 if(i == s.size() - 1){//如果最后全部都是0,那么只要輸出0即可 36 printf("0\n"); 37 break; 38 } 39 } 40 } 41 } 42 return 0; 43 }