SWUST OJ Delete Numbers(0700)
Delete Numbers(0700)
Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 1731 Accepted: 373
Description
给定n 位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n位正整数a(n<100) 和正整数k,设计一个算法找出剩下数字组成的新数最小的删数方案。 对于给定的正整数a,编程计算删去k个数字后得到的最小数。
Input
第1 行是1 个正整数a。第2 行是正整数k。
Output
计算出的最小数(输出无前导0)
Sample Input
178543
4
Sample Output
13
Hint
Source
mryang
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char str[100]; 6 int LEN,i,j,t,flag=0,k; 7 scanf("%s",str); 8 scanf("%d",&k); 9 LEN=strlen(str); 10 for(i=0;i<k;i++) 11 { 12 for(j=0;j<LEN-1;j++) 13 { 14 if(str[j]>str[j+1]) 15 { 16 for(t=j;t<LEN-1;t++) 17 { 18 str[t]=str[t+1]; 19 } 20 break; 21 } 22 } 23 LEN--; 24 } 25 for(i=0;i<LEN;i++) 26 { 27 if(flag==0&&str[i]=='0') 28 {} 29 else 30 { 31 printf("%c",str[i]); 32 flag=1; 33 } 34 } 35 printf("\n"); 36 return 0; 37 }
注:从高位开始,遇到降序则删除那个大的数,最后没有降序了,再考虑最后面的数,注意前导没有0。