hdu_1058

末尾是1 但不是11的 st

末尾是2 但不是12的 nd

末尾是3 但不是13的 rd

其他 th

打表过程:

  dp[x]代表第x个humble number

  dp中所有元素都是从1开始,*2 *3 *5 *7得到

// hdu 1058

// dp 打表

// Feb.16 2015

#include <cstdio>

#include <algorithm>



int dp[5900], n, n2, n3, n5, n7;



void pre_do()

{

    dp[1] = 1;

    n2 = n3 = n5 = n7 = 1;

    for(int i = 2; i <= 5900; ++i){

        dp[i] = std::min(dp[n2]*2, std::min(dp[n3]*3, std::min(dp[n5]*5, dp[n7]*7) ));

        if(dp[i] == dp[n2]*2) ++n2;

        if(dp[i] == dp[n3]*3) ++n3;

        if(dp[i] == dp[n5]*5) ++n5;

        if(dp[i] == dp[n7]*7) ++n7;

    }

}



int main(int argc, char const *argv[])

{

    // freopen("in", "r", stdin);

    pre_do();

    while(scanf("%d",&n) && n)

    {

        printf("The ");

        if(n%10==1&&n%100!=11)printf("%dst",n);

        else if(n%10==2&&n%100!=12)printf("%dnd",n);

        else if(n%10==3&&n%100!=13)printf("%drd",n);

        else printf("%dth",n);

        printf(" humble number is %d.\n",dp[n]);

    }

    return 0;

}

 

你可能感兴趣的:(HDU)