我的洛谷团队:https://www.luogu.com.cn/team/34776#main
题目描述
键盘输入一个高精度的正整数NN(不超过250位) ,去掉其中任意k个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和k,寻找一种方案使得剩下的数字组成的新数最小。
输入格式
nn (高精度的正整数)
kk(需要删除的数字个数)
输出格式
最后剩下的最小数。
输入输出样例
输入
175438
4
输出
13
这道题看起来容易,实际要比你想的难很多,一开始,我就是一个sort排序后再从后面删数。
一开始,我的代码如下
#include<bits/stdc++.h>
using namespace std;
int main() {
char a[255]= {};
char b[255]={};
int ans=0,ans1=0;
int n;
cin>>a>>n;
sort(a,a+strlen(a));
for(int i=0; i<strlen(a)-n; i++) {
b[i]=a[i];
ans++;
}
while(b[ans1]=='0'){
ans1++;
}
swap(b[0],b[ans1]);
cout<<b<<endl;
return 0;
}
经过不断研究后,终于AC了。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main() {
char a[255]={};
int m;
cin>>a>>m;
int lena=strlen(a);
while(m--) {
for(int i=0; i<lena-1; i++){
if(a[i]>a[i+1]) {
for(int j=i; j<lena-1; j++){
a[j]=a[j+1];
}
break;
}
}
lena--;
}
int ans=0;
while(ans<=lena&&a[ans]=='0') {
ans++;
}
if(ans>=lena) {
cout<<0<<endl;
} else {
for(int i=ans; i<lena; i++) {
cout<<a[i];
}
}
return 0;
}
坚持就是胜利加油!