description |
给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列成一个新的正整数。 n (1<=n<=200)位的正整数a和k,k小于n。 |
input |
可输入多组测试数据,每组测试数据分两行,每行一个数,数的含义如下。 第一行:正整数a(a是大于0的一个n位正整数) 第二行:正整数k 以0来结束测试数据。 |
output |
输出每组测试数据所得出的删k位数之后的最小数。 若输出的数首位是0,无须理会,0也直接输出即可。例如:024,就直接输出024,无须改成24。 |
sample_input |
178543 4 87654321 2 123456789 1 254193 1 90249 2 0 |
sample_output |
13 654321 12345678 24193 024 |
/*个人觉着吧,这题主要得知道排列的方法,所以我们的思路得正确,这题呢,首先从前往后遍历,当遇到后面数小于前面数时便去掉前面的大数,这样去掉k次,中间如遇到递增序列情况,则去掉最后一个数字,剩下的便是答案啦。
以下附上代码供参考:
*/
#include <iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
char a[300];
int k;
while(scanf("%s",a)!=EOF)
{
if(strcmp(a,"0")==0)
break;
scanf("%d",&k);
int l=strlen(a),t=k;
while(k)
{
int j=strlen(a)-1,flag;
for(int i=0;i<l-1;i++)
{
if(a[i]>a[i+1])
{
flag=1;j=i;break;
}
}
if(flag==1)
{
for(int i=j;i<l-1;i++)
a[i]=a[i+1];
}
k--;
}
for(int i=0;i<l-t;i++)
cout<<a[i];
cout<<endl;
}
return 0;
}