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;
}
