zoj 1095 - Humble Numbers

来源:互联网 发布:单片机开发板能做什么 编辑:程序博客网 时间:2024/04/25 08:45

题目:找到用2,3,5,7为数的因第n个数字。

分析:dp,数据结构。类似于合并果子的队列维护,用4根指针分别指向队列,用当前的数乘以对应数字即可。

说明:(2011-09-19 01:42)

#include <iostream>using namespace std;int F[ 5845 ];int n[ 4 ] = {2,3,5,7};int p[ 4 ];int main(){    F[ 1 ] = 1;    for ( int i = 0 ; i < 4 ; ++ i ) p[ i ] = 1;    int Count = 1;    while ( Count <= 5842 ) {        int min = F[ p[ 0 ] ]*n[ 0 ];        int spa = 0;        for ( int i = 1 ; i < 4 ; ++ i )            if ( min > F[ p[ i ] ]*n[ i ] ) {                min = F[ p[ i ] ]*n[ i ];                spa = i;            }        if ( min > F[ Count ] )            F[ ++ Count ] = min;        ++ p[ spa ];    }    int N;    while ( cin >> N && N ) {        cout << "The " << N;        if ( N%10 == 1 && N%100 != 11 )            cout << "st";        else if ( N%10 == 2 && N%100 != 12 )            cout << "nd";        else if ( N%10 == 3 && N%100 != 13 )            cout << "rd";        else            cout << "th";        cout << " humble number is " << F[ N ] << "." << endl;    }        return 0;}

0 0