刪數問題


題目鏈接

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 }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM