信息学奥赛

it2022-05-05  144

【题目描述】

输入一个高精度的正整数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判断,找到里面的降序的那一对数。


最新回复(0)