poj 1338
2013-09-08 09:56
记录数组w[I],代表第I个答案的值
用三个指针指向W数组,代表当前的W[A2]*2,W[A3]*3,W[A5]*5更新答案
每次取最小值,然后后移对应指针(可能一次移两个指针),可保证W数组的数不重复且递增
var a2, a3, a5 :longint; w :array[0..1600] of int64; i :longint;function min(a,b:int64):int64;begin if a>b then min:=b else min:=a;end;begin a2:=1; a3:=1; a5:=1;//指针 w[1]:=1; for i:=2 to 1500 do begin w[i]:=min(w[a2]*2,min(w[a3]*3,w[a5]*5));//更新答案(递推) if w[i]=w[a2]*2 then inc(a2);//移指针 if w[i]=w[a3]*3 then inc(a3); if w[i]=w[a5]*5 then inc(a5); end; read(i); while i<>0 do begin if i<>0 then writeln(w[i]); read(i); end;end.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步