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.
原文地址:https://www.cnblogs.com/BLADEVIL/p/3433481.html