【题目描述】
输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序组成一个新的正整数。编程对给定的n和s,寻找一种方案使得剩下的数字组成的新数最小。
输出新的正整数。(n不超过240位)
输入数据均不需判错。
【输入】
n
s
【输出】
最后剩下的最小数。
【输入样例】
175438
4
【输出样例】
13
#include<iostream>
using namespace std;
int main(){
int i,j,k,m,n;
char c[101];
int a[101];
cin>>c;
n=strlen(c);
for(i=0;i<n;i++){
a[i]=c[i]-'0';
}
cin>>m;
for(i=0;i<m;i++){
for(j=0;j<n-1;j++){
if(a[j]>a[j+1]){
for(k=j;k<n-1;k++){
a[k]=a[k+1];
}
for(int s=0;s<n;s++){
cout<<a[s];
}
cout<<endl;
break;//为什么有break;
}
}
n--;
}
j=0;
int t=n;
cout<<t<<"t"<<endl;
while((a[j]==0)&&(t>1)){
j++;
cout<<j<<endl;
t--;
}
cout<<j<<endl;
for(i=j;i<n;i++){
cout<<a[i];
}
cout<<endl;
return 0;
}
之前写的关于删数问题的博客有点问题,现重新更正。
1、关于这个从前往后,依次删除降序首位的做法做过怀疑,1432987,那这个例子来说,我想着,删除432是错误的,应该删除987,然而,删除的并不是432,是439,因为从2到9是升序。代码也写得很明确,只有当前一个大于后一个时,才会后面的依次前移一位。
2、中间有一段是三个for循环,i,j,k,其中,i是我们又来控制删除次数的,中间的那个j是从0开始数,他的只要目的是通过里面的if判断,找到里面的降序的那一对数。