hdu1058 Humble Numbers

http://acm.hdu.edu.cn/showproblem.php?pid=1058

DP

#include <stdio.h>
#define N 5848

int h[N];

int a[4];
int p[4] = {1, 1, 1, 1};

int min()
{
    int i, flag = 0;
    for(i=1; i<4; i++)
    {
        if(a[i] < a[flag])
        {
            flag = i;
        }
    }
    for(i=0; i<4; i++)
    {
        if(a[i] == a[flag])
        {
            p[i] ++;
        }
    }
    return a[flag];
}

void init()
{
    int hash[4] = {2, 3, 5, 7};
    int i, j;
    h[1] = 1;
    for(i=2; i<N; i++)
    {
        for(j=0; j<4; j++)
        {
            a[j] = h[p[j]] * hash[j];
        }
        h[i] = min();
        //printf("%d ", h[i]);
    }
}

int main()
{
    int i;
    init();
    while(scanf("%d", &i), i)
    {
        printf("The %d", i);
        if((10<i%100 && i%100<20) || i%10>3 || i%10==0)
        {
            printf("th");
        }
        else
        {
            if(i%10==1)
            {
                printf("st");
            }
            else
            {
                if(i%10==2)
                {
                    printf("nd");
                }
                else
                {
                    printf("rd");
                }
            }
        }
        printf(" humble number is %d.\n", h[i]);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/yuan1991/p/hdu1058.html