ACM水题-----删数问题

Time Limit:1000MS  Memory Limit:65536K
Total Submit:485 Accepted:158

Language: not limited

Description

问题描述:
给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列成一个新的正整数。

算法设计:
给定n (1<=n<=200)位的正整数a和k,此时,k小于n。
试着设计一个算法,找出删去k个数,剩下数字组成的新数最小的删数方案。

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

 

Hint

按高位到低位的方向搜索递减区间,考虑递减区间的首字符。

Source

 

Provider

root

 

 

 

 

/*呃。。还是手痒。。。又忍不住要写代码了。*/ /*其实这一题也没有什么好说的,按照hint来做就对.*/ /*不过木有想到的是,竟然一次就写好了,无需修改,无需调试。。。*/ /*不过,效率还是不够高,要1MS*/ #include<stdio.h> #include<string.h> int main(void) { int t = 0 ; int i = 0 ; int j = 0 ; int n = 0 ; int StrLen = 0 ; int DelNum = 0 ; char istr[201] ; int k = 0 ; while((gets(istr) != NULL) && istr[0] != '0') { scanf("%d",&DelNum) ; getchar() ; StrLen = strlen(istr) ; for(i = 0 ; i < DelNum ; i++) { for(j = 0 ; j < StrLen ; j++) { if(istr[j] > istr[j+1]) { for(k = j ; k < StrLen ; k++) { istr[k] = istr[k+1] ; } //end of for break ; } // end of if } // end of for if(j == StrLen) { istr[j-1] = '/0' ; } StrLen-- ; } // end of for puts(istr) ; } return 0 ; }

 

 

你可能感兴趣的:(算法,测试,null,input,output)