【Day2P4,又是一道水题】删数问题 题解

      简单而经典的贪心。少打等号,50。

 

【问题描述】 
键盘输入一个高精度的正整数n(≤240位),去掉其中任意s个数字后剩下的数字按原左右次序将
组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。
【输入格式】
n
s
【输出格式】
最后剩下的最小数。
【样例输入】
178543
4
【样例输出】
13

 

 

      这道题相信很多人都做过。方法不赘述,就是找到字符串中比后面一位大的一位,将它删除。如果没有,则删除最后一位。

 

参考代码:

1program deletee;
2 var
3 s:string;
4 i,n:integer;
5 begin
6 readln(s);
7 readln(n);
8 while n>0 do
9 begin
10 i:=1;
11 while(i<length(s))and(s[i]<=s[i+1])do inc(i); //找到符合条件的位置
12 delete(s,i,1); //将其删除。很显然,如果没有符合条件的就删最有一位
13 dec(n);
14 end;
15 while s[1]='0' do delete(s,1,1); //删除前面的0
16 writeln(s);
17 end.

(saltless原创,转载请注明出处)

 

posted on 2010-10-14 10:43  saltless  阅读(1165)  评论(1编辑  收藏  举报

导航