题目描述
键盘输入一个高精度的正整数 N (不超过 250 位),去掉其中任意 k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 N 和 k ,寻找一种方案使得剩下的数字组成的新数最小。
输入格式
输入两行正整数。
第一行输入一个高精度的正整数 n 。
第二行输入一个正整数 k ,表示需要删除的数字个数。
输出格式
输出一个整数,最后剩下的最小数。
样例 1
样例输入 1
175438
4
样例输出 1
13
#include<bits/stdc++.h>
using namespace std;
int main(){
//175438 4
int k;
char a[251];
cin>>a>>k;
int n=strlen(a);
for(int i=0;i<n;i++)cin>>a[n];
while(k--){
for(int i=0;i<n;i++){
if(a[i]>a[i+1]){
for(int j=i;j<n;j++){
a[j]=a[j+1];
}
break;
}
}
n--;
}
int m=0;
while(a[m]=='0'&&m!=n-1)m++;
for(;a[m]!='\0';m++)cout<<a[m];
}
java
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String a = sc.next();
int k = sc.nextInt();
int n = a.length();
char[] ch = a.toCharArray();
while(k > 0){
for(int i = 0; i < n - 1; i++){
if(ch[i] > ch[i+1]){
for(int j = i; j < n-1; j++){
ch[j] = ch[j+1];
}
break;
}
}
k--;
n--;
}
int m = 0;
while(ch[m] == '0' && m != n-1) m++;
for(;m < n;m++)
System.out.print(ch[m]);
sc.close();
}
}