<贪心算法>学习笔记
-----程序 | 三少爷
例子1. 删数问题
键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的按原左右次序组成一个新的正整数,编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小.
例如N=176845; S=4;
最小数=14;
代码:{delphi2007编译通过}
program find_min_integer;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
N:string;
S,i:integer;
begin
write('N=');readln(N);
write('S=');readln(S);
while S>0 do
begin
i:=1;
while (i<length(N))and(n[i]<=n[i+1]) do inc(i);
delete(N,i,1);
dec(s);
end;
while (length(N)>1)and(N[1]='0') do delete(n,1,1);
write(N);
readln;
end.
PS:固定的颜色,与循环颜色对应
S=4;
Length(N)=6 à N=’176845’;
I:=1 à N[1]:=1 ;N[2]:=7; à i:=2;
I:=2 à N[2]:=7 ;N[3]:=6;
Delete(N,2,1) à N=’16845’;
Dec(S)=3;
S=3;
Length(N)=5 à N=’16845’;
I:=1 à N[1]:=1 ;N[2]:=6; à i:=2;
I:=2 à N[2]:=6 ;N[3]:=8; à i:=3;
I:=3 à N[3]:=8 ;N[4]:=4;
Delete(N,3,1) à N=’1645’;
Dec(S)=2;
S=2;
Length(N)=4 à N=’1645’;
I:=1 à N[1]:=1 ;N[2]:=6; à i:=2;
I:=2 à N[2]:=6 ;N[3]:=4;
Delete(N,2,1) à N=’145’;
Dec(S)=1;
S=1;
Length(N)=3 à N=’145’;
I:=1 à N[1]:=1 ;N[2]:=4; à i:=2;
I:=2 à N[2]:=4 ;N[3]:=5; à i:=3;
Delete(N,3,1) à N=’14’;
Dec(S)=0;
绿色循环结束,黄色也随之结束.代码的分析就是这样.