HDU 1058 humble number

不用指针优化就703MS  指针优化93MS

注意要用int64 因为过程中可能会相乘溢出

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string.h>

const int INF = 2100000000 ;
int dir[5] = {0,2, 3, 5, 7};
int p[5] = {0,1, 1, 1, 1};
__int64 table[6000];
int main()
{
    int cnt = 1, i, j, n, pos;
    __int64 min ;
    table[1] = 1;
    while(cnt <= 5843)
    {
        min = INF ;        
        for(j=1; j<=4; j++)
        {
            __int64 tmp = dir[j] * table[p[j]];
            if( tmp > table[cnt] && tmp < min )
            {
                min = tmp;
    //            pos = j;
            }
        }        
        table[++cnt] = min ;
//        p[pos] ++ ; 错的。这样只加了其中一种 如table[cnt] = 6 时 有可能 2*3 和 3*2 所以要都加,如下
        for(j=1; j<=4; j++)
            if(table[cnt] == dir[j]*table[p[j]])
                p[j]++;
    }
    while(scanf("%d", &n), n!=0)
    {
        if(n%100 ==11 || n%100 == 12 || n%100 == 13)
            printf("The %dth humble number is %d.\n", n, table[n]);
        else if( n%10 == 1)
            printf("The %dst humble number is %d.\n", n,table[n]);
        else if( n%10 == 2)
            printf("The %dnd humble number is %d.\n", n,table[n]);
        else if( n%10 == 3)
            printf("The %drd humble number is %d.\n", n,table[n]);
        else
            printf("The %dth humble number is %d.\n", n,table[n]);
        
    }

    return 0;
}

 

转载于:https://www.cnblogs.com/crisxyj/archive/2013/03/08/2950225.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值